python 爬取豆瓣书籍信息

本文介绍了如何使用Python爬取豆瓣特定标签下的书籍信息,包括访问标签页面获取书籍链接,逐一访问书籍页面抓取详情和评分,并将数据持久化存储到Excel文件。主要涉及requests、re、bs4和lxml库,以及正则表达式和BeautifulSoup的使用。
摘要由CSDN通过智能技术生成

继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取)。原创,转载请联系我。


需求爬取豆瓣某类型标签下的所有书籍的详细信息及评分

语言python

支持库

  • 正则、解析和搜索:re、requests、bs4、lxml (后三者需要安装)
  • 随机数:time、random

步骤三步走

  1. 访问标签页面,获取该标签下的所有书籍的链接
  2. 逐一访问书籍链接,爬取书籍信息和评分
  3. 持久化存储书籍信息(这里用了excel,可以使用数据库)

一、访问标签页面,获取该标签下的所有书籍的链接

照例,我们先看一下豆瓣的Robots.txt , 不能爬取禁止的内容。

我们这一步要爬取的标签页面,以小说为例 https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4

先去看看它的HTML结构

 发现,每一本书,都在一个<li>标签当中,而我们需要的只是那张图片的链接(就是书籍页面的链接)

这样,就可以写正则或者是利用bs4(BeatuifulSoup)来获取书籍的链接。

可以看到,每一页只显示了20本书,所以需要遍历访问所有的页面,它的页面链接也是有规律的

第二页:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=20&type=T

第三页:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=40&type=T

即:start每次递增20就好了。

下面来看代码:

 1 # -*- coding: utf-8 -*-
 2 # @Author  : yocichen
 3 # @Email   : yocichen@126.com
 4 # @File    : labelListBooks.py
 5 # @Software: PyCharm
 6 # @Time    : 2019/11/11 20:10
 7 
 8 import re
 9 import openpyxl
10 import requests
11 from requests import RequestException
12 from bs4 import BeautifulSoup
13 import lxml
14 import time
15 import random
16 
17 src_list = []
18 
19 def get_one_page(url):
20     '''
21     Get the html of a page by requests module
22     :param url: page url
23     :return: html / None
24     '''
25     try:
26         head = ['Mozilla/5.0', 'Chrome/78.0.3904.97', 'Safari/537.36']
27         headers = {
28             'user-agent':head[random.randint(0, 2)]
29         }
30         response = requests.get(url, headers=headers, proxies={
   'http':'171.15.65.195:9999'}) # 这里的代理,可以设置也可以不加,如果失效,不加或者替换其他的即可
31         if response.status_code == 200:
32             return response.text
33         return None
34     except RequestException:
35         return None
36 
37 def get_page_src(html, selector):
38     '''
39     Get book's src from label page
40     :param html: book
41     :param selector: src selector
42     :return: src(list)
43     '''
44     # html = get_one_page(url)
45     if html is not None:
46         soup = BeautifulSoup(html, 'lxml')
47         res = soup.select(selector)
48         pattern = re.compile('href="(.*?)"', re.S)
49         src = re.findall(pattern, str(res))
50         return src
51     else:
52         return []
53 
54 def write_excel_xlsx(items, file):
55     '''
56     Write the useful info into excel(*.xlsx file)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值