爬取单页内容
利用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