本博主会经常分享个人学习经历和Python的坑,帮大家解决一些编程的问题,希望学习的道路上可以互相帮助,在爬虫方面有想要爬取的数据可以评论区留言,每周日随机抽取更新代码
微信公众号:DeepThinkere
B站:DeepThinkerr
文章目录
爬虫-猫眼电影排名
一、猫眼电影网页分析
1.1 网站URL分析
首先是查看猫眼网站是否支持爬虫,网页为根目录下的robots.txt文件(https://maoyan.com/robots.txt)。
通过robots协议,该网页支持所有的User-agent,但不允许访问* ?utm_source *目录下下的所有文件,而此次爬虫访问的网页为https://maoyan.com/board/4,可以爬取。该网页显示的是排名1 ~ 10的电影,排名10 ~ 20的电影URL为https://maoyan.com/board/4?offset=10,因此可以发现offset为页面排名为offset~offset+10的电影信息。
1.2 分析页面布局
通过浏览器的检查窗口可以查看页面的HTML源代码,可以通过Ctrl+F来快速查找自己想要找的位置,例如在页面显示电影《活着》排名第一,直接搜索关键词“活着”就找到对应的位置。
通过分析HTML代码,可以发现每一个电影的信息都在"
- 排名
- 封面(这里有两个img,可以进入链接看,找到满足要求的)
- 名称
- 主演
- 时间
- 评分
通过上述位置可以得到正则化表达式。
二、爬虫代码
2.1 获取URL的HTML数据
在这里使用了urllib的RobotFileParser函数,判断该网页是否支持爬虫,如果不支持则不进行访问,支持则继续访问,并输出“URL 支持爬虫”。
# 爬取url数据
def get_one_page(url, user_agent=None, robots=True, robot_url=None) :
# 判断robots协议是否支持爬虫
if robots is True :
rp = RobotFileParser(robot_url)
rp.read()
if rp.can_fetch(user_agent, url) is not True :
print(url + '\t' +'该不支持爬虫,如不遵守robots协议可以将robots参数改为False')
return None
print(url + '\t' +'支持爬虫')
# 获取HTML信息
headers = {
'User-Agent' : user_agent
}
response = requests.get(url, headers=headers)
# 判断是否访问成功
if response.status_code == 200 :
return response.text
return None
2.2 HTML数据清洗
通过正则化表达式进行数据清洗,返回当前页面的信息,返回数据类型为list。
# 数据清洗
def parse_one_page(html) :
pattern = re.compile('<dd>.*?board-index .*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)<.*?integer.*?>(.*?)<.*?fraction.*?>(.*?)<.*?</d