requests库实战-爬取豆瓣top250的图书

日拱一卒|数据挖掘012

推文对应的代码链接:https://github.com/piyixiaeco/daily-code/blob/master/requests-douban%20book%20Top250.ipynb

参照“手把手教你爬豆瓣Top250的电影”,本篇推送将爬取豆瓣Top250图书,练习requests库的使用。

整体思路:

  1. 得到豆瓣Top250图书的所有网页链接
  2. 从每个网页中获取源代码内容
  3. 提取网页中符合要求的数据
  4. 将三个函数整合成一个函数

一、得到所有网址链接

第一页网址:
https://book.douban.com/top250?start=
第二页网址:
https://book.douban.com/top250?start=25
第三页网址:
https://book.douban.com/top250?start=50

从中我们可以发现网址链接规律:

只有start=后面的数字会发生变化,而且是有规律地变化,规律为25x(i-1),其中i为当前的页码

将爬取相应网页链接的函数命名为allurl(),具体如下:

二、从每个网页中获取源代码内容

首先通过requests.get()的方法得到关于本次请求的返回包,并放在r这个变量中。通过r的属性r.status_code或者r.reason,获取本次请求的状态


我们可以看到返回的状态码是200,OK,说明我们可以顺利地访问这个网页。


为了保证运行时的稳定性,加入try和except。如果try部分的代码运行正常,则在执行完毕后不会执行except内的内容,如果出现各种类型的ERROR,则会执行except下代码,而不会因为报错而终止程序的运行。

三、 提取网页中符合要求的数据

对于r.text源码有两种通常的处理方法,一种是使用html解析引擎解析,如BeautifulSoup,一种是使用正则表达式匹配文本。

正则表达式的优势在于不需要知道这个源代码结构,只需要找到相关信息前后的唯一标签即可,方便了操作。

通过Chrome浏览器检查选项


可知:图书的名称都保存在title="..."\n这个标签中

同理得到评分和评价人数



然而这并不是最终想要的结果,还需要剔除掉尖括号和其中的内容,保留我们所需的信息。

将信息储存到字典中

通过pandas中的DataFrame构建一个表格型数据结构


将这些步骤封装成一个函数

四、 将三个函数整合成一个函数

将三个函数整合成一个函数(main(filename))
首先创建一个同类型的空的DataFrame名为all,以便在后续的循环添加内容

对每个网页都通过gethtmltext(url)的方法得到源代码,对每个源代码都通过getbookinfo(url)的方法获得frame。

最后将爬取下来的数据写入到Excel进行保存


将以上的整合有:


爬取豆瓣图书Top250任务大功告成~

参考资料:
手把手教你爬豆瓣Top250的电影
手把手教你爬豆瓣Top250的电影(二)
使用python抓取豆瓣top250电影数据进行分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章