爬取单页内容
利用requests请求目标站点,得到单个网页HTML代码,返回结果
正则表达式分析
根据HTML代码分析得到电影的名称、主演、上映时间、评分、图片链接等信息。
保存至文件
通过文件的形式将结果保存,每一部电影一个结果一行json字符串
开启循环及多进程
对多页内容遍历,开启多进程提高爬取速度。
附上代码:
1 import json
2 from multiprocessing import Pool
3 import requests
4 from requests.exceptions import RequestException
5 import re
6
7 def get_one_page(url):
8 try:
9 response = requests.get(url)
10 if response.status_code == 200:
11 return response.text
12 return None
13 except RequestException:
14 return None
15
16 def parse_one_page(html):
17 pattern = re.compile(r\'<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a\'
18 +\'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>\'
19 +\'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>\',re.S)
20 items = re.findall(pattern,html)
21 for item in items:
22 yield{
23 \'index\':item[0],
24 \'image\':item[1],
25 \'title\':item[2],
26 \'actor\':item[3].strip()[3:],
27 \'time\':item[4].strip()[5:],
28 \'score\':item[5]+item[6]
29 }
30
31 def write_to_file(content):
32 with open(\'result.txt\',\'a\',encoding=\'utf-8\') as f:
33 f.write((json.dumps(content, ensure_ascii=False))+\'\n\')
34 f.close()
35
36 def main(offset):
37 url = \'https://maoyan.com/board/4?offset=\' + str(offset)
38 html = get_one_page(url)
39 # print(html)
40 for item in parse_one_page(html):
41 print(item)
42 write_to_file(item)
43
44 if __name__ == \'__main__\':
45 # for i in range(10):
46 # main(i*10)
47 pool = Pool()
48 pool.map(main,[i*10 for i in range(10)])
参考:
Python 3网络爬虫开发实战 ,崔庆才著 ,2018.04.pdf