map语法获取index_Python爬虫获取猫眼电影Top100信息和图片

789c7766b6a4b928b5b3b5fa5198e4ab.png

来源:https://urlify.cn/3qMvEj


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

详细操作

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

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

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

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

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

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

    urls = ['https://maoyan.com/board/4?offset={}'.format(i * 10)    for i in range(10)]

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

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

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

# 猫眼电影网站有反爬虫措施,设置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,我们就可以写个方法进行网页源码的捕捉。

# 爬取网页源代码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

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

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

d9687eeaf8728d4cd6c3aac25f427295.png

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

# 正则表达式提取信息def parse_one_page(html):    pattern = re.compile('.*?board-index.*?>(\d+).*?src="(.*?)".*?name">                         + '.*?>(.*?).*?star">(.*?).*?releasetime">(.*?).*?integer">(.*?).*?fraction">(.*?).*?',                         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文本。

# 猫眼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

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

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

ef57876aff26aafe9ef11f3db0ff6265.gif

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

# 下载电影封面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用来存储结果数据。

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')

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

3ea9ce0e2bbfacb8b28de2f6ca5dbf37.png

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

65f9ff5e2911f61f017fcc0d56c64321.png

打开由程序创建的covers目录

1d2fec0296efc5735e3b018d897dde72.png

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

45b04806318c98b4eb1f91439c8d2c77.png

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

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


-END-

89685aeb60fb573c3d579a400bd0646b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值