教你用Python爬取豆瓣图书Top250
质量、速度、廉价,选择其中两个
今天我们要做的就是用Python爬取豆瓣图书Top250,先打开网站看一下
今天不谈这豆瓣图书top250垃圾不垃圾的问题,只看看怎么用python把数据爬取下来,首先先来看网页结构,一个界面只有25本书,一共十个界面,点击切换可以发现界面的切换可以通过参数start控制
比如说https://book.douban.com/top250?start=0代表的就是第一页,https://book.douban.com/top250?start=1代表的就是第二页,像这样的界面有10个
打开网址,chrome浏览器右键检查或者F12,firefox可以右键查看元素,浏览html结构
每一个table中就是一本书的信息,我们只要按规则抽取就好了,现在准备一下步骤
- 循环10个网址
- 请求网址
- 抽取数据
- 保存到xlsx里
请求网址可以使用requests来做,直接 requests.get(target_url) 一步到位,主要问题在抽取数据上,在这方面,我们可以使用BeautifulSoup,Beautiful Soup是一个Python包,功能包括解析HTML、XML文档、修复含有未闭合标签等错误的文档。这个扩展包为待解析的页面建立一棵树,以便提取其中的数据,这在网络数据采集时非常有用,该库可以说是爬虫利器啊
book = requests.get(target_url) soup = BeautifulSoup(book.text, lxml)
我们使用lxml作为解析器,构建BeautifulSoup对象
table = soup.findAll(table, {"width": "100%"})
调用findAll,找到所有符合条件的节点,第一个参数是标签名称,第二个参数是要求,这里是找到所有宽度为100%的table标签,该方法返回的是一个列表
然后我们只需要按步骤取数据就好了,比如书名就是table.div.a.text
网页上有换行和空格,我们需要把这些不需要的东西去掉,可以使用replace方法替换掉
r_name = name.replace( , ).replace( , )
如果你想取一个标签的一个属性可以通过键值对的形式取,比如数据链接
url = item.div.a[href]
要注意一点就是信息并不总是完整的,有时可能空缺,如果你没有做处理依旧去取这个值那么程序便会报错,比如这个书籍描述就不是所有书都有
附上一段完整程序