猫眼top抓取
本次要抓取的是https://www.maoyan.com/board/4这个网页里面的top列表。将电影名字,主演,评分信息抓取过来。
分析html结构
编写get_one_page从html获取相关的html结构信息
提取规则编写
编写正则表达式,提取相关信息。 通过re.compile编译正则,通过re.finditer进行遍历,通过groupdict将结果转为一个dict。 进行返回。
结果写文件
上面提取到的结果,可以通过写到文件进行永久存储的。
代码如下
1import re
2import requests
3import json
4from typing import List
5
6def get_one_page():
7 url = "https://www.maoyan.com/board/4"
8 headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
9 }
10 response = requests.get(url,headers=headers)
11 html = response.text
12 return html
13
14def parse_item(html_content):
15 # 正则表达式,使用命名组
16# <dd>
17# <i class="board-index board-index-1">1</i>
18# <a href="/films/1200486" title="我不是药神" class="image-link" data-act="boarditem-click" data-val="{movieId:1200486}">
19# <img src="//s3.meituan.net/static-prod01/com.sankuai.movie.fe.mywww-files/image/loading_2.e3d934bf.png" alt="" class="poster-default" />
20# <img data-src="https://p0.pipi.cn/mmdb/54ecde9a2c9f2a51ba06d67d795a9434b8421.jpg?imageView2/1/w/160/h/220" alt="我不是药神" class="board-img" />
21# </a>
22# <div class="board-item-main">
23# <div class="board-item-content">
24# <div class="movie-item-info">
25# <p class="name"><a href="/films/1200486" title="我不是药神" data-act="boarditem-click" data-val="{movieId:1200486}">我不是药神</a></p>
26# <p class="star">
27# 主演:徐峥,王传君,周一围
28# </p>
29# <p class="releasetime">上映时间:2018-07-05</p> </div>
30# <div class="movie-item-number score-num">
31# <p class="score"><i class="integer">9.</i><i class="fraction">6</i></p>
32# </div>
33
34# </div>
35# </div>
36
37# </dd>
38 pattern = re.compile( r'<dd>.*?<a href="/films/(?P<id>\d+)" title="(?P<title>.*?)".*?/>.*?<img data-src="(?P<url>.*?)".*?</dd>', re.DOTALL)
39
40 # 搜索匹配
41
42 # 搜索匹配
43 match_iter = pattern.finditer(html_content)
44
45 # 提取信息并创建MovieInfo实例
46 for match in match_iter:
47 group_dict = match.groupdict()
48 yield group_dict
49 # yield movie_info
50 #print(movie_info.__dict__)
51def write_to_file(item_list):
52 with open('maoyan_movie.txt', 'w', encoding='utf-8') as f:
53 json.dump(item_list, f,indent=4)
54if __name__ == '__main__':
55 html_content = get_one_page()
56 print(html_content)
57 item_list = list(parse_item(html_content))
58 write_to_file(item_list)
59