首页 > 其他 > 详细

简单爬虫抓取数据

时间:2019-09-27 17:34:16      阅读:90      评论:0      收藏:0      [点我收藏+]

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)])

 

简单爬虫抓取数据

原文:https://www.cnblogs.com/liqiongming/p/11599090.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!