0

0

Python中的爬虫实战:豆瓣图书爬虫

WBOY

WBOY

发布时间:2023-06-11 13:33:07

|

2893人浏览过

|

来源于php中文网

原创

python是当今最热门的编程语言之一,在不同的领域都得到了广泛的应用,如数据科学、人工智能、网络安全等。其中,python在网络爬虫领域表现出色,许多企业和个人利用python进行数据采集和分析。本篇文章将介绍如何使用python爬取豆瓣图书信息,帮助读者初步了解python网络爬虫的实现方法和技术。

首先,对于豆瓣图书信息爬虫,我们需要用到Python中的两个重要的库:urllib和beautifulsoup4。其中,urllib库主要用于网络请求和数据读取,而beautifulsoup4库则可用于解析HTML和XML等结构化文档,从而提取需要的信息。在使用这些库之前,我们需要先安装它们,使用pip命令即可完成安装。安装完成后,就可以开始我们的实战了。

  1. 确定爬取目标

在使用Python进行爬虫时,首先需要明确爬取目标。对于本篇文章而言,我们的目标是爬取豆瓣图书的基本信息,如书名、作者、出版社、出版日期、评分等。此外,我们还需要爬取多页图书信息。

  1. 分析HTML结构

确定了爬取目标之后,我们需要进一步分析豆瓣图书的HTML结构,以便确定所需信息的位置和特征。我们可以使用Chrome或Firefox等浏览器自带的开发者工具来查看页面源代码。通过观察HTML结构,我们可以找到需要爬取的标签和属性,进而编写Python代码进行实现。

  1. 编写代码

接下来,我们在Python中编写豆瓣图书爬虫代码。代码的核心是:

立即学习Python免费学习笔记(深入)”;

  • 发送网络请求并获取HTML页面;
  • 解析HTML文档,提取所需信息;
  • 存储数据。

下面是完整代码:

import urllib.request
from bs4 import BeautifulSoup

url = 'https://book.douban.com/top250'
books = []

def get_html(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'}
    req = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    return html

def parse_html(html):
    soup = BeautifulSoup(html,'html.parser')
    book_list_soup = soup.find('div', attrs={'class': 'article'})
    for book_soup in book_list_soup.find_all('table'):
        book_title_soup = book_soup.find('div', attrs={'class': 'pl2'})
        book_title_link = book_title_soup.find('a')
        book_title = book_title_link.get('title')
        book_url = book_title_link.get('href')
        book_info_soup = book_soup.find('p', attrs={'class': 'pl'})
        book_info = book_info_soup.string.strip()
        book_rating_num_soup = book_soup.find('span', attrs={'class': 'rating_nums'})
        book_rating_num = book_rating_num_soup.string.strip()
        book_rating_people_num_span_soup = book_soup.find('span', attrs={'class': 'pl'})
        book_rating_people_num = book_rating_people_num_span_soup.string.strip()[1:-4]
        book_author_and_publish_soup = book_soup.find('p',attrs={'class':'pl'}).next_sibling.string.strip()
        book_author_and_publish = book_author_and_publish_soup.split('/')
        book_author = book_author_and_publish[0]
        book_publish = book_author_and_publish[-3]
        book_year = book_author_and_publish[-2]
        books.append({
        'title': book_title,
        'url': book_url,
        'info': book_info,
        'author':book_author,
        'publish':book_publish,
        'year':book_year,
        'rating_num':book_rating_num,
        'rating_people_num':book_rating_people_num
        })

def save_data():
    with open('douban_top250.txt','w',encoding='utf-8') as f:
        for book in books:
            f.write('书名:{0}
'.format(book['title']))
            f.write('链接:{0}
'.format(book['url']))
            f.write('信息:{0}
'.format(book['info']))
            f.write('作者:{0}
'.format(book['author']))
            f.write('出版社:{0}
'.format(book['publish']))
            f.write('出版年份:{0}
'.format(book['year']))
            f.write('评分:{0}
'.format(book['rating_num']))
            f.write('评分人数:{0}

'.format(book['rating_people_num']))

if __name__ == '__main__':
    for i in range(10):
        start = i*25
        url = 'https://book.douban.com/top250?start={0}'.format(start)
        html = get_html(url)
        parse_html(html)
    save_data()

代码解析:

首先,我们定义一个主网址url和一个空列表books(用于存储图书信息)。接着,我们编写get_html函数,用于发送请求并获取HTML页面。在该函数中,我们设置了请求头headers,以模拟浏览器发送请求,从而避免被网站屏蔽。我们使用urllib库的Request方法,将请求头和网址封装到一个对象中,然后使用urllib库的urlopen方法,发送网络请求并获取页面,最后使用read和decode方法,将页面内容转换成utf-8格式的字符串。

薏米AI
薏米AI

YMI.AI-快捷、高效的人工智能创作平台

下载

我们编写parse_html函数,用于解析HTML文档,提取所需信息。在该函数中,我们使用beautifulsoup4库的find和find_all方法,查找HTML页面中符合要求的标签和属性。具体地,我们通过观察豆瓣图书的HTML结构,找到了每本图书所在的table标签和对应的书名、链接、信息和评分等信息,并编写了提取这些数据的代码。其中,我们使用了strip和split方法,对字符串进行处理,以去除多余空白字符和分割字符串。

最后,我们编写了save_data函数,用于将提取的图书信息存储到本地文件中。在该函数中,我们使用Python内置函数open,打开一个文本文件,以写入模式写入文件内容,并使用format方法,将每本图书的相关信息格式化为字符串,写入文件。注意,我们需要在文件名后面加上编码方式encoding='utf-8',以确保文件内容不会出现乱码。

在主程序中,我们使用for循环,爬取豆瓣图书的前250本图书。为此,我们需要每页爬取25本图书,共爬取10页。在每个循环中,我们根据当前页码计算出所需的url,并调用get_html函数,获取HTML页面。接着,我们将页面传递给parse_html函数,解析页面并提取所需信息。最后,我们调用save_data函数,将所有图书信息保存到本地文件中。

  1. 运行代码

在完成代码编写后,我们可以在命令行(Windows系统)或终端(MacOS或Linux系统)中进入代码所在目录,并执行命令python3 爬虫脚本名.py,即可运行该Python网络爬虫。在程序运行期间,我们可以观察程序的输出信息,以判断程序是否正确执行。程序执行完毕后,我们可以检查本地文件douban_top250.txt,确认是否已成功保存数据。

总结

通过本篇文章的介绍,我们初步了解了Python网络爬虫的实现方法和技术。具体而言,我们使用Python中的urllib和beautifulsoup4库,针对豆瓣图书网站的HTML结构,编写了爬取豆瓣图书信息的Python程序,成功实现了数据采集和存储。此外,在实际应用中,我们需要了解一些网络爬虫的注意事项,如不要过度频繁地向同一网站发送请求,以避免被封IP地址。

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

56

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

26

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 3.1万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号