requests库实战-爬取豆瓣top250的图书
日拱一卒|数据挖掘012
推文对应的代码链接:https://github.com/piyixiaeco/daily-code/blob/master/requests-douban%20book%20Top250.ipynb
参照“手把手教你爬豆瓣Top250的电影”,本篇推送将爬取豆瓣Top250图书,练习requests库的使用。
整体思路:
- 得到豆瓣Top250图书的所有网页链接
- 从每个网页中获取源代码内容
- 提取网页中符合要求的数据
- 将三个函数整合成一个函数
一、得到所有网址链接
第一页网址:
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,获取本次请求的状态
2
我们可以看到返回的状态码是200,OK,说明我们可以顺利地访问这个网页。
3
为了保证运行时的稳定性,加入try和except。如果try部分的代码运行正常,则在执行完毕后不会执行except内的内容,如果出现各种类型的ERROR,则会执行except下代码,而不会因为报错而终止程序的运行。
三、 提取网页中符合要求的数据
对于r.text源码有两种通常的处理方法,一种是使用html解析引擎解析,如BeautifulSoup,一种是使用正则表达式匹配文本。
正则表达式的优势在于不需要知道这个源代码结构,只需要找到相关信息前后的唯一标签即可,方便了操作。
通过Chrome浏览器检查选项
4
可知:图书的名称都保存在title="..."\n这个标签中
5同理得到评分和评价人数
6
7
然而这并不是最终想要的结果,还需要剔除掉尖括号和其中的内容,保留我们所需的信息。
将信息储存到字典中
11通过pandas中的DataFrame构建一个表格型数据结构
12
将这些步骤封装成一个函数
13四、 将三个函数整合成一个函数
将三个函数整合成一个函数(main(filename))
首先创建一个同类型的空的DataFrame名为all,以便在后续的循环添加内容
对每个网页都通过gethtmltext(url)的方法得到源代码,对每个源代码都通过getbookinfo(url)的方法获得frame。
15最后将爬取下来的数据写入到Excel进行保存
16 17
将以上的整合有:
18
爬取豆瓣图书Top250任务大功告成~
参考资料:
手把手教你爬豆瓣Top250的电影
手把手教你爬豆瓣Top250的电影(二)
使用python抓取豆瓣top250电影数据进行分析