搜索
首页后端开发Python教程Python中的爬虫实战:豆瓣图书爬虫

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

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

  1. 确定爬取目标

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

  1. 分析HTML结构

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

  1. 编写代码

接下来,我们在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格式的字符串。

我们编写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中的爬虫实战:豆瓣图书爬虫的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Python与C:学习曲线和易用性Python与C:学习曲线和易用性Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python vs. C:内存管理和控制Python vs. C:内存管理和控制Apr 19, 2025 am 12:17 AM

Python和C 在内存管理和控制方面的差异显着。 1.Python使用自动内存管理,基于引用计数和垃圾回收,简化了程序员的工作。 2.C 则要求手动管理内存,提供更多控制权但增加了复杂性和出错风险。选择哪种语言应基于项目需求和团队技术栈。

科学计算的Python:详细的外观科学计算的Python:详细的外观Apr 19, 2025 am 12:15 AM

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Python和C:找到合适的工具Python和C:找到合适的工具Apr 19, 2025 am 12:04 AM

选择Python还是C 取决于项目需求:1)Python适合快速开发、数据科学和脚本编写,因其简洁语法和丰富库;2)C 适用于需要高性能和底层控制的场景,如系统编程和游戏开发,因其编译型和手动内存管理。

数据科学和机器学习的Python数据科学和机器学习的PythonApr 19, 2025 am 12:02 AM

Python在数据科学和机器学习中的应用广泛,主要依赖于其简洁性和强大的库生态系统。1)Pandas用于数据处理和分析,2)Numpy提供高效的数值计算,3)Scikit-learn用于机器学习模型构建和优化,这些库让Python成为数据科学和机器学习的理想工具。

学习Python:2小时的每日学习是否足够?学习Python:2小时的每日学习是否足够?Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Web开发的Python:关键应用程序Web开发的Python:关键应用程序Apr 18, 2025 am 12:20 AM

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优

Python vs.C:探索性能和效率Python vs.C:探索性能和效率Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器