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