通过requests模块的get方法成功获得网页内容后,接下来就要对网页内容进行解析,以便快速定位到所要抓取的数据。
import requests
response=requests.get('http://douban.com')
print(response.text)
如何对response.text的内容进行解析呢,我用了BeautifulSoup这个模块。
首先我导入这个模块
from bs4 import BeautifulSoup
然后,还是老办法用dir(BeautifulSoup)这个内建函数看看BeautifulSoup有哪些东东。
看来东西还不少啊,有时间要一个一个地研究一下,在这里,首先要创建BeautifulSoup的对象。
看看“__init”这个方法里面怎么写的,输入help(BeautifulSoup.__init__)
看介绍,通过以下代码,就应该可以成功获得了response.text用BeautifulSoup解析后得到的对象
soup = BeautifulSoup(response.text)
然而,出错了
系统提示,应该是需要你显示地指定解析器,用来解析你提供的文档,也就是我们传入的response.text,那就根据系统提示进行修改,修改之后就没有错误了,注意了,这里我已经事先安装了“lxml”这个模块,没有安装这个模块的可能会有其他提示,只要根据提示进行修改,加上其他解析器作为第二个参数就行了。
soup = BeautifulSoup(response.text,'lxml')
这样就没错误提示了
现在soup这个对象就承载了我们全部的希望,我们要通过soup这个对象来获取我们需要的数据。老套路,先用dir(soup)一探究竟。
在这里,soup表示的是包含整个response.text的对象,我们需要用一些html标签以及属性来定位到具体的标签对象,然后通过那个标签对象再提取需要的数据。
在这里,我选择了用“select”这个方法,当然还有其他方法可用,上图中可有一大串方法,条条大道通罗马。“select”这个方法有点像写CSS,比如我要找到下图中
豆瓣时间这一块内容
dbtime = soup.select('#anony-time')
print(dbtime)
基本上就定位到了我们所要的标签位置,不过要注意的是,dbtime是一个列表对象,dbtime[0]列表中的元素才是一个标签对象,对于标签对象,我们也可以用“select”方法继续定位。
比如我继续定位到这本书
lis = dbtime[0].select('ul.time-list li')
print(lis[0])
如此,通过BeautifulSoup和select方法就可以比较容易地定位到所需要的数据啦。