教你用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中就是一本书的信息,我们只要按规则抽取就好了,现在准备一下步骤

  1. 循环10个网址
  2. 请求网址
  3. 抽取数据
  4. 保存到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]

要注意一点就是信息并不总是完整的,有时可能空缺,如果你没有做处理依旧去取这个值那么程序便会报错,比如这个书籍描述就不是所有书都有

附上一段完整程序

经验分享 程序员 微信小程序 职场和发展