翼度科技»论坛 编程开发 python 查看内容

【python爬虫案例】利用python爬取豆瓣读书评分TOP250排行数据

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
一、爬取案例-豆瓣读书TOP250

上一期给大家分享了个python爬虫案例:豆瓣电影TOP250的排行榜数据爬取
【python爬虫案例】利用python爬虫爬取豆瓣电影评分TOP250排行数据!

今天再给大家分享一下:豆瓣读书排行榜TOP250的python爬虫案例!
因为是同一个网站,所以流程和逻辑上都是差不多的。
这次爬取的目标网址是:https://book.douban.com/top250

老规矩!咱们以目标为驱动,以兴趣为导向,先来看下爬虫程序运行后得到的excel文档数据

那代码是如何实现豆瓣读书TOP250数据爬取的了?下面逐一讲解一下python实现。
二、豆瓣读书TOP250网站分析

通过浏览器F12查看所有请求,发现他并没有发送ajax请求,那说明我们要的TOP250的排行榜数据大概率是在html页面内容上。

于是我们 点击右键->查看网页源代码  ,发现我们需要的豆瓣读书评分的排行榜数据都在html页面里

这就简单了,我们直接往下看,上代码。
三、python爬虫代码详解

首先,导入我们需要用到的库
  1. import requests     # 发请求
  2. from lxml import etree  # 解析html
  3. import pandas as pd  # 存取csv
复制代码
然后,向豆瓣读书TOP250的网页发起请求,获得html页面内容
  1. page_source = requests.get(page_url, headers=headers).text
复制代码
用lxml库解析html页面
  1. tree = etree.HTML(page_source)
复制代码
使用xpath来提取我们需要的书籍排行榜数据内容
  1. # 获得数据
  2. tables = tree.xpath('//div[@id="content"]/div/div[1]/div/table')
  3. for table in tables:
  4.     top = table.xpath(".//td[@valign='top']")[-1]
  5.     # 书名
  6.     book_name = extract_first(top.xpath("./div/a/text()")).strip()
  7.     # 豆瓣链接
  8.     url = extract_first(top.xpath("./div/a/@href")).strip()
  9.     # 作者、译者、出版社、出版日期、价格
  10.     info = extract_first(top.xpath("./p[@class='pl']/text()")).strip()
  11.     # 评分
  12.     score = extract_first(top.xpath("./div[@class='star clearfix']/span[@class='rating_nums']/text()")).strip()
  13.     # 评分人数
  14.     star_people = extract_first(top.xpath("./div[@class='star clearfix']/span[@class='pl']/text()")).strip()
  15.     star_people_num = re.search("\d+", star_people).group()
  16.     # 一句话评价
  17.     one_evaluate = extract_first(top.xpath("./p[@class='quote']/span/text()")).strip()
复制代码
其中,需要特殊说明的是,上面的info变量。
他里面会包含:作者、译者、出版社、出版日期、价格等信息,提取的时候会有多种格式。

为了应对书籍信息中列表的不同长度,所以会有如下应对不同格式的处理代码
  1. infos = info.split("/")
  2. if len(infos) == 5:
  3.     author = infos[0]
  4.     translator = infos[1]
  5.     publish = infos[2]
  6.     publish_date = infos[3]
  7.     price = infos[4]
  8. elif len(infos) == 4:
  9.     author = infos[0]
  10.     publish = infos[1]
  11.     publish_date = infos[2]
  12.     price = infos[3]
  13. elif len(infos) == 6 :  # 有2个价格 第1页:福尔摩斯探案全集
  14.     author = infos[0]
  15.     translator = infos[1]
  16.     publish = infos[2]
  17.     publish_date = infos[3]
  18.     price = str(infos[4]) + "/" + str(infos[5])
  19. elif len(infos) == 3:    # 没有作者,且没有译者 第5页:十万个为什么
  20.     publish = infos[0]
  21.     publish_date = infos[1]
  22.     price = infos[2]
  23. else:
  24.     print(f"未匹配到的格式 书名={book_name}", infos)
复制代码
最后,我们将爬虫爬取的数据保存到csv文档里
  1. def save_to_csv(csv_name):
  2.     """
  3.     数据保存到csv
  4.     @param csv_name: csv文件名字
  5.     @return:
  6.     """
  7.     df = pd.DataFrame()  # 初始化一个DataFrame对象
  8.     df['书名'] = book_names
  9.     df['豆瓣链接'] = book_urls
  10.     df['作者'] = authors
  11.     df['译者'] = translators
  12.     df['出版社'] = publishers
  13.     df['出版日期'] = publish_dates
  14.     df['价格'] = prices
  15.     df['评分'] = scores
  16.     df['评分人数'] = star_peoples
  17.     df['一句话评价'] = one_evaluates
  18.     df.to_csv(csv_name, encoding='utf8')  # 将数据保存到csv文件
复制代码
上面的book_names、book_urls等变量都是使用的list来进行存储的,这样才能符合pandas导出数据时的需要,最后调用to_csv()方法即可导出豆瓣读书的排行榜数据到文档里了。
三、python爬虫源代码获取

我是 @王哪跑,持续分享python干货,各类副业软件!
附完整python源码及数据:【python爬虫案例】利用python爬虫爬取豆瓣读书评分TOP250排行数据

来源:https://www.cnblogs.com/wangnp/p/18412477
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具