使用多线程抓取80s的电影列表和电影的豆瓣评分
# -*- coding: utf-8 -*- # File : 用resquests爬取80s电影列表.py # Author: HuXianyong # Date : 2018-09-10 17:33 import json import re import requests from multiprocessing import Pool import time #定义一个电影个数的索引 index = 1 #定义一个获取单页源码的函数 def get_one_page(url): try: response = requests.get(url) if response.status_code == 200: return response.text return None except Exception: return None #把电影信息写到文件里面去 def write_to_file(items): with open('80s_move_list.txt',"a",encoding="utf-8") as f: f.write(json.dumps(items,ensure_ascii=False)+'\n') #json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False f.close() #定义一个获取电影名和评分的函数 def parse_one_page(html): #正则匹配电影的名字和豆瓣评分数 pattern = re.compile(r'<a href="/movie/\d+" title="(.*?)">.*?<a href="/movie/\d+">(.*?)</a></h3>', re.S) items = re.findall(pattern, html) recevie_data(items) #把获取到的电影信息存到字典里面 def recevie_data(items): global index for item in items: #print(index,item[1].strip(),item[0].split(" ")[2]) dic = { "index":index, "move_name" : item[1].strip(), "move_score": item[0].split(" ")[2] } write_to_file(dic) index +=1 #传入电影的页数获取电影源码 def main(page_num): url = 'https://www.80s.tw/movie/list/-----p/'+str(page_num) html = get_one_page(url) parse_one_page(html) if __name__ == "__main__": ##普通的抓取方式 # start_time = time.time() # for num in range(1,11): # # main(num) # finish_time = time.time() # use_time = finish_time - start_time # print(use_time) # print('*'*60) #多线程抓取方式 start_time = time.time() pool = Pool() pool.map(main,[i for i in range(1,11)]) finish_time = time.time() use_time = finish_time - start_time print(use_time)
第一个是不使用多线程的,第二个是使用多线程的时间,
结果如下: