class ThreadCrawl(Thread): def __init__(self,page_queue): Thread.__init__(self) # 继承多线程父类 self.q = page_queue def run(self): while True: if self.q.empty(): break # 构造请求头 page = self.q.get() headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36', 'origin': 'https://mm.taobao.com' } # 请求url url = 'https://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8' # 从任务队列中取出任务,页数 # 构造post请求数据 data = { 'viewFlag': 'A', 'sortType': 'default', 'currentPage': page, 'pageSize': 100, } # 根据协议类型,选择不同的代理 proxies = [{"http": "http://61.135.217.7:80"}, {"http": "http://120.27.144.192:8080"}, {"http": "http://123.119.202.254:8118"}, ] # 普通ip代理设置方式 proxies = random.choice(proxies) # 多个代理ip随机选一个发送请求 # proxy = {"http": "账号:密码@61.158.163.130:16852"} #私密ip代理设置方式 timeout = 3 # 定义重复请求次数 while timeout: # 发送请求 data = requests.post(url=url, data=data, headers=headers, proxies=proxies).json() if data['status'] == -1: # 如果没有请求到正确的数据将重复请求三次 timeout -= 1 else: data_queue.put(data) # 将抓取下来的数据放到数据队列 break
淘宝小姐姐快到我碗里来(多线程爬虫) (2)
内容版权声明:除非注明,否则皆为本站原创文章。