Python爬虫学习(十一)使用Request爬取猫眼电影排行
2017-09-17 本文已影响373人
弃用中
猫眼电影有一个TOP100榜,
这次我们就用Request对其进行爬取。
爬取目标
爬取地址为:http://maoyan.com/board/4
从图中,我们可以看到每一部电影,都列出它的名称、主演、评分和上映时间。我们的目标就是把这些信息都爬取下来,为了方便查找和管理,决定把这些数据都放入数据库中,选用的是MongDB。
如果从来没有接触过MongDB,可以先安装配置:windows下MongoDB的安装及配置。
爬取分析
我们查看第二页,发现URL由http://maoyan.com/board/4
变成了http://maoyan.com/board/4?offset=10
。由此,我们可以推断出offset是个偏移量,可以通过改变其值,访问到对应的页面。
然后,我们在Chrome中单击鼠标右键,选择检查,可以看到
通过观察,我们知道,每一部电影信息都包含在一个dd标签中。
进一步,我们分析一下要提取信息的CSS选择器表达式。
- 电影名
- 包含在dd下class="name"的标签中,其表达式可以写成
.name
- 包含在dd下class="name"的标签中,其表达式可以写成
- 主演
- dd下class="star",其表达式可以写成
.star
- dd下class="star",其表达式可以写成
- 上映时间
- dd下class="releasetime",其表达式可以写成
.releasetime
- dd下class="releasetime",其表达式可以写成
- 评分
- 包含在dd下class="score式可以写成
.score
- 包含在dd下class="score式可以写成
大致流程
给定基本url = 'http://maoyan.com/board/4',每次迭代都改变offset的值,并对当前的页面进行数据的提取,并保存到数据库中。
编写代码
首先是获取网页源码:
# 获取到网页源码
def getHTML(base_url, offset = 0):
url = base_url + str(offset)
try:
response = requests.get(url,headers=headers)
except requests.HTTPError as e:
return None
else:
return response.text
然后是解析获取到的页面源码
# 解析获取到的页面源码
def parseHTML(html):
soup = BeautifulSoup(html,'lxml')
dd = soup.select('dd')
for item in dd:
yield {
'name':item.select('.name')[0].get_text(),
'star':item.select('.star')[0].get_text().strip(),
'releasetime':item.select('.releasetime')[0].get_text(),
'score':item.select('.score')[0].get_text()
}
我们可以先测试一下代码:
if __name__ == "__main__":
for i in parseHTML(getHTML(base_url)):
print(i)
运行结果如下:
获取到的电影信息
接下来,我们便可将获取到的信息保存到MongoDB中:
# 保存至数据库
def saveToDB(item):
if collection.insert_one(item):
print("保存成功!")
else:
print("保存失败!")
测试把第一页的电影,存储到MongoDB中,结果如下:
到Robomongo(MongoDB的一个可视化软件)中查看,
。
成功保存到MongoDB!
接下来,调整一下代码,即可爬取到TOP100中所有的电影:
if __name__ == "__main__":
for i in range(0,100,10):
for item in parseHTML(getHTML(base_url,i)):
saveToDB(item)
结果如下:
以上。