我用PythonPython程序员

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选择器表达式。

大致流程

给定基本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)

结果如下:


以上。

上一篇下一篇

猜你喜欢

热点阅读