今天就跟大家聊聊有关python中怎么利用多线程实现一个网络爬虫,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
#!_*_coding:utf-8- -*- #! @time :2021/4/4 7:58 #!name :Vislf import threading,queue import time import requests from bs4 import BeautifulSoup from tqdm import tqdm #文本写入线程 def write_txt(url_list,Q): print('启动了') f=open(book_name,'w',encoding='utf-8') f.close() # 开始写入 for i in tqdm(range(len(url_list))): va=Q.get() url_list[va[-1]].append(va[:-1]) f=open(book_name,'a',encoding='utf-8') print('打开文本开始写入') print('开始写入文本') for i in tqdm(range(len(url_list))): f.write(url_list[i][1]) f.write('\n') f.write('\n') f.write('\n') f.write('\n'.join(url_list[i][-1])) f.write('\n') f.write('\n') f.write('\n') f.flush() #网页下载,解析线程 def get_txt(n,q): req = requests.get(url=n[0]) req.encoding = 'utf-8' html = req.text bf = BeautifulSoup(html, 'lxml') texts = bf.find('div', id='content') content = texts.text.strip().split('\xa0' * 4) content.append(n[2]) q.put(content,1) #主线程 def main(): print('程序启动:') q=queue.Queue(2048) threads=[] url_list_data=[] ks_time=time.time() #获取小说章节信息 req = requests.get(url=target) req.encoding = 'utf-8' html = req.text chapter_bs = BeautifulSoup(html, 'lxml') chapters = chapter_bs.find('div', id='list') chapters = chapters.find_all('a') #得到url列表,标号列表 for i in range(len(chapters)): data0 = server + chapters[i].get('href') data1 = chapters[i].string data2 = i url_list_data.append([]) url_list_data[i].append(data0) url_list_data[i].append(data1) url_list_data[i].append(data2) #网页线程启动 for i in tqdm(range(len(url_list_data))): t=threading.Thread(target=get_txt,args=(url_list_data[i],q)) threads.append(t) threads[i].start() t=threading.Thread(target=write_txt,args=(url_list_data,q)) t.start() for i in range(len(url_list_data)-500): threads[i].join() t.join() print('python 程序结束的地方-') sj=time.time()-ks_time print(sj) if __name__=="__main__": server = 'https://www.xsbiquge.com' book_name = '诡秘之主.txt' target = 'https://www.xsbiquge.com/15_15338/' main() exit()
看完上述内容,你们对python中怎么利用多线程实现一个网络爬虫有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。