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

2024-06-23 15:36

本文主要是介绍Python中的爬虫实战:豆瓣图书爬虫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

1.确定爬取目标

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

2.分析HTML结构

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

3.编写代码

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

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

下面是完整代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

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函数,将所有图书信息保存到本地文件中。

4.运行代码

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

总结

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

这篇关于Python中的爬虫实战:豆瓣图书爬虫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087560

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、