首页 > 编程学习 > 爬虫【5】爬虫猫眼电影100榜单并保存到csv

爬虫【5】爬虫猫眼电影100榜单并保存到csv

爬虫回顾:

  • 爬虫【1】打开网站,获取信息
  • 爬虫【2】重构UserAgent
  • 爬虫【3】URL地址编码
  • 爬虫【4】爬取百度贴吧并生成静态页面

网页URL分析

首先我们打开猫眼电影,经到榜单这一页
在这里插入图片描述
我们可以发现它的url是这样的https://maoyan.com/board/4?offset=0
通过分析我们可以知道/board表示榜单,offset表示页数。进入到第二页发现offset变为20,由此可以发现offset的规律

分析网页html并编写正则项

接下来我们右击打开网页源代码,ctrl+a ctrl + c 复制到vscode中打开,右击代码格式化我们就可以得到整整齐齐的
的网页源代码喽!
对网页源代码进行分析发现一个网页的信息是包含在一个<dd></dd>里的

<dd><i class="board-index board-index-3">3</i><a href="/films/4055" title="这个杀手不太冷" class="image-link" data-act="boarditem-click"data-val="{movieId:4055}"><img src="//s3plus.meituan.net/v1/mss_e2821d7f0cfe4ac1bf9202ecf9590e67/cdn-prod/file:5788b470/imagalt="" class="poster-default" /><img data-src="https://p1.meituan.net/movie/6bea9af4524dfbd0b668eaa7e187c3df767253.jpg@160w_220h_1alt="这个杀手不太冷" class="board-img" /></a><div class="board-item-main"><div class="board-item-content"><div class="movie-item-info"><p class="name"><a href="/films/4055" title="这个杀手不太冷" data-act="boarditem-click"data-val="{movieId:4055}">这个杀手不太冷</a></p><p class="star">主演:让·雷诺,加里·奥德曼,娜塔莉·波特曼</p><p class="releasetime">上映时间:1994-09-14(法国)</p></div><div class="movie-item-number score-num"><p class="score"><i class="integer">9.</i><i class="fraction">5</i></p></div></div></div>
</dd>

在里面可以发现我们需要的排名,电影名,主演,上映时间
所以我们可以写出我们的正则,这个我写的正则也不是唯一的和我的有一定的差距都可以
'<dd>.*?board-index-(.*?)".*?<img data-src=.*?alt="(.*?)".*?<p class="star">(.*?)</p>.*?"releasetime">(.*?)</p>.*?</dd>'
主要的思路就算把我们要的东西分组出来就ok了

csv文件

将爬取下来的内容保存到csv文件中就ok啦
在这里插入图片描述

代码

废话就不多说了,下面上代码,代码写了注释,应该可以看懂,还是比较简单的

from urllib import request
import re, time, random, csv
from fake_useragent import UserAgentclass MaoyanSpider:def __init__(self):self.url = 'http://maoyan.com/board/4?offset={}'def get_url(self, offset):"""获取url"""return self.url.format(offset)def get_headers(self):"""获取伪造的User-Agent"""ua = UserAgent()return {'User-Agent': ua.random}def get_html(self, headers, offset):"""获取html信息"""url = self.get_url(offset)print(url)res = request.Request(url, headers=headers)req = request.urlopen(res)html = req.read().decode()return htmldef pattern_html(self, html):"""获取正则匹配的内容"""pattern = re.compile('<dd>.*?board-index-(.*?)".*?<img data-src=.*?alt="(.*?)".*?<p class="star">(.*?)</p>.*?"releasetime">(.*?)</p>.*?</dd>',re.S)return pattern.findall(html)def save_csv(self, moives):"""讲内容保存到csv中"""L = []with open('mouyan.csv', 'a') as f:writer = csv.writer(f)for r in moives:ranking = r[0].strip()name = r[1].strip()star = r[2].strip()[3:]time = r[3].strip()[5:15]L.append((ranking, name, star, time))print(ranking, name, time, star)# 在for循环外面writer.writerows(L)# 主运行函数def run(self):for i in range(1, 11):offset = (i - 1) * 10headers = self.get_headers()html = self.get_html(headers, offset)movies = self.pattern_html(html)self.save_csv(movies)time.sleep(random.randint(9,13))if __name__ == '__main__':maoyan = MaoyanSpider()maoyan.run()

本文链接:https://www.ngui.cc/el/1524037.html
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000