1、requests + 正则表达式 获取 ‘猫眼电影top100’。

使用 进程池Pool 提高速度。(问题:使用进程池数据有缺少,待解决中)

 1 import requests
 2 from requests.exceptions import RequestException
 3 import re
 4 import json
 5 from multiprocessing import Pool
 6
 7
 8 """获取猫眼电影Top100的数据"""
 9 # 获取单页数据信息;
10 def get_one_page(url, headers):
11     try:
12         response = requests.get(url, headers=headers)
13         if response.status_code == 200:
14             return response.text
15         return None
16     except RequestException:
17         return None
18
19 # 使用正则表达式解析数据;
20 def parse_one_page(html):
21     pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a.*?>'
22                          +'(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">'
23                          +'(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
24     items = re.findall(pattern, html)
25     # 将获取的数据以字典形式返回;
26     for item in items:
27         yield {
28             'index': item[0],
29             'image': item[1],
30             'title': item[2],
31             'actor': item[3].strip()[3:],
32             'time': item[4].strip()[5:],
33             'score': item[5]+item[6]
34         }
35
36 # 将字典转换为字符串保存,
37 def write_to_file(content):
38     with open('result.txt', 'a',encoding="utf8") as f:
39         f.write(json.dumps(content, ensure_ascii=False) + "\n")
40         f.close()
41
42 # 传入爬取链接,运行函数;
43 def main(offset):
44     url = "https://maoyan.com/board/4?offset=" + str(offset)
45     headers = {
46         "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
47     }
48     html = get_one_page(url, headers=headers)
49     for item in parse_one_page(html):
50         write_to_file(item)
51
52 if __name__ == '__main__':
53     # for i in range(10):
54     #     main(i*10)
55     # 使用 进程池 提高爬取速度;
56     # 将数组中的每个元素提取出来当作函数的参数,创建一个个进程,放进进程池中;
57     # 第一个参数是函数,第二个参数是迭代器,将迭代器中的数字作为参数依次传入函数中;
58     Pool = Pool()
59     Pool.map(main, [i*10 for i in range(5)])
02-13 23:33