在我学习爬虫的初期,我觉得比较麻烦、比较困扰的一点,就是从已有的html结构树里面搜索哪些是我要的信息。因为需要使用find与特定条件来获取目标信息,这样程序才能快速的实现批量化存储数据。
接下来用一个例子实践一下如何查找匹配对象。
爬取电影信息
首先使用Requests和BeautifulSoup获得解析后的结构树
url = 'http://movie.douban.com/top250?start=%d&filter='%(i)
#通过url的改变来实现翻页爬虫,爬前4页共200个电影
headers = {
'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6)' }
# 伪装为浏览器
html = requests.get(url, headers=headers).content
soup = BeautifulSoup(html.decode('utf-8'))
相较于直接去网页查看源代码,格式化输出的结构树看起来更加友好。上述代码输出的结构树如下图所示:
这一个图片中包含了两个电影的基本信息。
基本的寻找思路是:找到所有电影有共性的部分,以这部分作为格式化索引,对于同一个变量提取每一个电影的不同值。这里我们选择提取电影的“名称”、“简介页信息”。
首先看到红圈部分的<div class='item'>
,树结构中所有的标签都是前后对应的,与<div class='item'>
对应的则是</div>
。在每一部电影信息的开头都有<div class='item'>
,就说明它是每部信息的独立标识标签,每一部电影信息的这个标签都是相同的,只是此<div>
中具体的内容有所不同。
因此<div class='item'>
就可以作为我们标记每部电影的唯一标志,在具体操作中,使用find找到所有<div class='item'>
模块,每个模块代表一部电影,接下来再在各部电影结构树内部提取具体信息。
在使用find的时候需要注意