前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫获取猫眼电影Top100信息和图片,原来也不是很难

python爬虫获取猫眼电影Top100信息和图片,原来也不是很难

作者头像
大数据梦想家
发布2021-01-27 16:16:49
1.2K0
发布2021-01-27 16:16:49
举报
文章被收录于专栏:大数据成长之路

写在前面: 博主是一名软件工程系大数据应用开发专业大二的学生,昵称来源于《爱丽丝梦游仙境》中的Alice和自己的昵称。作为一名互联网小白,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于起步阶段的萌新。由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!个人小站:http://alices.ibilibili.xyz/ , 博客主页:https://alice.blog.csdn.net/ 尽管当前水平可能不及各位大佬,但我还是希望自己能够做得更好,因为一天的生活就是一生的缩影。我希望在最美的年华,做最好的自己

有一段时间没写关于爬虫的博客了,距离上一次自学爬虫已经过去了有一年的时间。想起刚写博客那会,没有什么粉丝,写关于大数据技术的博客受众面不是很广,所以基本上不怎么涨粉。每次涨粉都是因为那段时间分享的几篇关于爬虫入门的几个小Demo,像图片下载器,酷狗Top250,稍微难一点的像爬取拉勾网等等,至今历历在目…

在这里插入图片描述
在这里插入图片描述

虽然不是python专业的学子,但凭着对爬虫莫名的热爱,让我逐渐找回了曾经的自己。

在这里插入图片描述
在这里插入图片描述

本篇博客博主为大家带来关于使用Python爬虫获取猫眼电影Top100的信息和…作为一名图片党,所必不可少的每部电影的封面图?

在这里插入图片描述
在这里插入图片描述

详细操作

我们首先根据网址https://maoyan.com/board/4进入到猫眼的Top100榜单首页

在这里插入图片描述
在这里插入图片描述

注意:光理论是不够的,在此送大家一套2020最新Python全栈实战视频教程, 点击此处免费获取一起进步哦!

通过观察其他页网址url的一个变化关系,我们可以尝试发现网址的变化规律

第二页的网址https://maoyan.com/board/4?offset=10

第三页的网址https://maoyan.com/board/4?offset=20

一直到最后一页的网址https://maoyan.com/board/4?offset=90

我们可以写一个url的列表推导式

代码语言:javascript
复制
    urls = ['https://maoyan.com/board/4?offset={}'.format(i * 10)
    for i in range(10)]

但这次咱用多线程的方式,先写好主程序入口,在main函数的调用中传递一个列表参数。

代码语言:javascript
复制
if __name__ == '__main__':
    # 对每一页信息进行爬取
    pool = Pool()
    pool.map(main, [i * 10 for i in range(10)])
    pool.close()
    pool.join()

猫眼电影网站有反爬虫措施,我们可以通过设置headers,“伪装”成浏览器进行爬取

代码语言:javascript
复制
# 猫眼电影网站有反爬虫措施,设置headers后可以爬取
headers = {
    'Content-Type': 'text/plain; charset=UTF-8',
    'Origin': 'https://maoyan.com',
    'Referer': 'https://maoyan.com/board/4',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

有了请求头和构造出来的url,我们就可以写个方法进行网页源码的捕捉。

代码语言:javascript
复制
# 爬取网页源代码
def get_one_page(url, headers):
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

有了源码,我们就可以对其进行解析。

通过观察源代码,发现用正则表达式可以轻易获取到我们想要的信息。

在这里插入图片描述
在这里插入图片描述

于是可以用正则表达式进行信息的提取,将其返回的数据存放至一个字典里

代码语言:javascript
复制
# 正则表达式提取信息
def parse_one_page(html):
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
                         + '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',
                         re.S)
    items = re.findall(pattern, html)
    for item in items:
        yield {
            'index': item[0],
            'image': item[1],
            'title': item[2],
            'actor': item[3].strip()[3:],
            'time': item[4].strip()[5:],
            'score': item[5] + item[6]
        }

现在有了内容,我们就应该考虑存储的问题了。

为了方便查看,我们这里将其写入本地的txt文本。

代码语言:javascript
复制
# 猫眼TOP100所有信息写入文件
def write_to_file(content):
    # encoding ='utf-8',ensure_ascii =False,使写入文件的代码显示为中文
    with open('result.txt', 'a', encoding='utf-8') as f:
        f.write(json.dumps(content, ensure_ascii=False) + '\n')
        f.close()

提示: 这里使用dumps是将dict转化成str格式。另外json.dumps 序列化时对中文默认使用的ascii编码。因此想输出真正的中文需要指定ensure_ascii=False

以为到这里就完了,是不是还忘了点啥?

对啊,我们还要下载每部电影对应的图片,但现在都已经获取到了每部电影的信息,下载图片那还不是轻轻松松。

我们拿到图片的url,进行request访问,然后将返回的内容写入到本地目录下就ok了

代码语言:javascript
复制
# 下载电影封面
def save_image_file(url, path):
    jd = requests.get(url)
    if jd.status_code == 200:
        with open(path, 'wb') as f:
            f.write(jd.content)
            f.close()

最后我们再完善一下我们的main函数。对上述所写的功能方法进行调用,并在本地创建文件夹covers用来存储结果数据。

代码语言:javascript
复制
def main(offset):
    url = "https://maoyan.com/board/4?offset=" + str(offset)
    html = get_one_page(url, headers)
    if not os.path.exists('covers'):
        os.mkdir('covers')
    for item in parse_one_page(html):
        print(item)
        write_to_file(item)
        save_image_file(item['image'], 'covers/' + item['title'] + '.jpg')

然后就可以运行程序了,可以看到用了多线程之后,速度快了很多。

在这里插入图片描述
在这里插入图片描述

待到程序运行完毕,我们打开同级目录下生成的result.txt文件

在这里插入图片描述
在这里插入图片描述

打开由程序创建的covers目录

在这里插入图片描述
在这里插入图片描述

我们任意点开一张图片,例如菌哥很喜欢的千与千寻

在这里插入图片描述
在这里插入图片描述

注意:最后送大家一套2020最新企业Pyhon项目实战视频教程,点击此处免费获取,希望大家一起进步哦!


ok啦,看到类似上述的效果图,说明我们就成功啦~

受益或对爬虫感兴趣的朋友记得点个赞支持一下~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 详细操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档