多线程爬取某贴吧帖子
本帖最后由 Lobolang 于 2019-8-14 22:24 编辑由于刚学没多久,技术有限,有不少错误望各位师兄师姐多多指点..{:1_907:}
import requests
import threading
from lxml import etree
from queue import Queue
headers={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Mobile Safari/537.36'}
class TiebaSpider:
def __init__(self):
self.url='http://tieba.baidu.com/f?&kw=lol&pn={}' #本代码以lol为例子,lol可更换为其他贴吧的吧名
self.url_queen = Queue()
self.response_queen = Queue()
def get_urllist(self):
for i in range(0,5):
self.url_queen.put(self.url.format(i*30))
def get_response(self):
while True:
url = self.url_queen.get()
response=requests.get(url,headers=headers)
self.response_queen.put(response.content.decode())
self.url_queen.task_done()
def get_info(self):
while True:
html = etree.HTML(self.response_queen.get())
title=html.xpath('//div[@class="ti_title"]/span/text()')
title_url=html.xpath('//ul[@class="threads_list"]//a/@href')
str='http://tieba.baidu.com'
url=
count=0
while count<len(title):
print('标题:%s 地址:%s' %(title,url))
count+=1
self.response_queen.task_done()
def run(self):
thread_list=[]
for i in range(1): #获取页码的线程数:1 线程数可根据自己喜好更改
t_list=threading.Thread(target=self.get_urllist)
thread_list.append(t_list)
for i in range(10): #获取响应的线程数:10
t_response=threading.Thread(target=self.get_response)
thread_list.append(t_response)
for i in range(3): #采集数据的线程数:3
t_info=threading.Thread(target=self.get_info)
thread_list.append(t_info)
for t in thread_list:
t.setDaemon(True)
t.start()
for p in (self.url_queen,self.response_queen):
p.join() #设置主线程等待其他线程结束再结束
print("\33[36m获取结束")
if __name__ == '__main__':
q=TiebaSpider()
q.run() xpath使用不太了解,有时候遇到只有图片没有title内容的帖子就获取不到标题,然后后面标题和网址就乱了,或者就列表溢出{:1_907:},,,,经排查发现是获取title的xpath中的span标签为空,,,我也不知道这个怎么写,望有师兄师姐指点指点{:301_1004:} 谢谢分享 感谢分享 谢谢分享。 感谢热心分享!
页:
[1]