Python爬取豆瓣图书信息学习记录

本文记录了一次使用Python爬取豆瓣图书信息的过程,涉及openpyxl库和threading模块。爬取了书名、作者、评分、评分人数和链接,由于文字量大,未抓取简介。通过XPath解析网页,使用yield和queue处理数据,但因IP被封而暂停,计划后续添加代理IP功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python爬取豆瓣网图书信息

(一)爬虫思路:

# 爬虫思路汇总:
#   ①,https://book.douban.com/tag/  总书签首页
#       抓取豆瓣图书书签上所有的书签名字,并保存为一个数组
#       当输入一个标签时,根据标签去生成对应的网址。如果标签不存在数组中,提示帮助,然后显示这个标签数组内容
#   ②,多线程爬取豆瓣图书信息
#           1,爬取图书名字跟作者
#           2,爬取图书对应的链接
#           3,爬取图书的简介信息
#           4,爬取图书的豆瓣评分
#   ③,将数据储存在xls表格中,按标签分类命名xls文件。
#       按一定条件排序:评分或者默认排序
# 项目目的:
#           ①,熟悉xpath提取与正则    ②,熟悉threading多线程
#           ③,熟悉表格输出操作openpyxl模块操作
#           ④,熟悉文件存取操作
本次代码通过自主学习 openpyxl 与threading模块,完成了后面部分的要求,爬取了对应的 书名—作者—豆瓣评分—参与评分总人数—地址链接,这里没有对简介信息做操作,考虑到文字太多表格存储不方便。所以就没弄了,影响不大。

(二)源代码讲解:

Ⅰ. 总标签分类的获取

由于时间问题,这里就直接给贴上我的源代码,个人觉得代码注释已非常详细,很容易就能看懂。 由于没有用 scrapy 框架,而是用的单个文件,所以我把 获取标签的总分类单独用一个文件来写这个程序了。然后把获取书本信息也单独用一个文件来写了。其实这个并不影响。因为我们可以通过导入文件来是两个 .py 文件能够连接起来。具体导入操作:
通过 sys模块来完成: 打开计算机–> cmd–>输入一下指令
# 先进入Python环境
>>> ipython
>>> import sys
>>> # 查看所有包路径
>>> sys.path
>>> # 添加刚才自己所写的包的路径
>>> sys.path.append("D://douban/")

在完成上面的添加之后,在某一个程序文件中就可以用 import 来导入我们想导入的文件了。给出我获取总分类标签的源码:

''' 将标签信息储存到表格 '''
import urllib.request
import re
from lxml import etree      # 使用xpath筛选器
from user_agent.base import generate_user_agent
from openpyxl import Workbook, load_workbook      # 用于创建 和 读取 表格文件
from openpyxl.styles import colors, Font, Alignment, Border, Side       # 改变字体颜色,大小, 对其方式, 边框
goabal tag_list
tag_list = []       # 用来存储所有分类标签下的子标签

def url_open(url):
    head = {
  "User-Agent": generate_user_agent()}
    req = urllib.request.Request(url, headers=head)
    response = urllib.request.urlopen(req).read()
    return response


# 获取首页书签,并存为表格
def get_mark(url):
    response = url_open(url).decode('utf-8')
    html = etree.HTML(response, parser=None, )
    # 获取标签总分类的列表
    categories = html.xpath('//a[@class="tag-title-wrapper"]/@name')

    # 获取《文学》下的标签分类
        # 匹配出文学分类下包含的所有标签内容
    literature_string = re.compile('(<a name="文学" class="tag-title-wrapper">\s(\s|.)*?\s</div>)').findall(response)[0][0]
    # 实例化对象为可xpath操作的对象,xpath返回列表
    html = etree.HTML(literature_string, parser=None, )
    literature_string = html.xpath('//td/a/text()')
    # 保存第一个标签分类
    yield save_main_mark(row=main_row_start, value=categories[0])
    # 保存第一个标签下的子标签
    yield save_mark(literature_string)

    # 获取《流行》下的标签分类
    popular_string = re.compile('(<a name="流行" class="tag-title-wrapper">\s(\s|.)*?\s</div>)').findall(response)[0][0]
    html = etree.HTML(popular_string, parser=None, )
    popular_string = html.xpath('//t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值