Python多線程爬蟲實(shí)戰(zhàn)_爬取糗事百科段子的實(shí)例
多線程爬蟲:即程序中的某些程序段并行執(zhí)行,
合理地設(shè)置多線程,可以讓爬蟲效率更高
糗事百科段子普通爬蟲和多線程爬蟲
分析該網(wǎng)址鏈接得出:
https://www.qiushibaike.com/8hr/page/頁碼/
多線程爬蟲也就和JAVA的多線程差不多,直接上代碼
''' #此處代碼為普通爬蟲 import urllib.request import urllib.error import re headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36") opener = urllib.request.build_opener() opener.addheaders = [headers] urllib.request.install_opener(opener) for i in range(1,2): url = "https://www.qiushibaike.com/8hr/page/"+str(i)+"/" pagedata = urllib.request.urlopen(url).read().decode("utf-8","ignore") pattern = '<div class="content">.*?<span>(.*?)</span>(.*?)</div>' datalist = re.compile(pattern,re.S).findall(pagedata) for j in range(0,len(datalist)): print("第"+str(i)+"頁第"+str(j)+"個(gè)段子內(nèi)容是:") print(datalist[j]) ''' ''' #此處為多線程介紹代碼 import threading #導(dǎo)入多線程包 class A(threading.Thread): #創(chuàng)建一個(gè)多線程A def __init__(self): #必須包含的兩個(gè)方法之一:初始化線程 threading.Thread.__init__(self) def run(self): #必須包含的兩個(gè)方法之一:線程運(yùn)行方法 for i in range(0,11): print("我是線程A") class B(threading.Thread): #創(chuàng)建一個(gè)多線程A def __init__(self): #必須包含的兩個(gè)方法之一:初始化線程 threading.Thread.__init__(self) def run(self): #必須包含的兩個(gè)方法之一:線程運(yùn)行方法 for i in range(0,11): print("我是線程B") t1 = A() #線程實(shí)例化 t1.start() #線程運(yùn)行 t2 = B() t2.start() ''' #此處為修改后的多線程爬蟲 #使用多線程進(jìn)行奇偶頁的爬取 import urllib.request import urllib.error import re import threading headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36") opener = urllib.request.build_opener() opener.addheaders = [headers] urllib.request.install_opener(opener) class one(threading.Thread): #爬取奇數(shù)頁內(nèi)容 def __init__(self): threading.Thread.__init__(self) def run(self): for i in range(1,12,2): url = "https://www.qiushibaike.com/8hr/page/"+str(i)+"/" pagedata = urllib.request.urlopen(url).read().decode("utf-8","ignore") pattern = '<div class="content">.*?<span>(.*?)</span>(.*?)</div>' datalist = re.compile(pattern,re.S).findall(pagedata) for j in range(0,len(datalist)): print("第"+str(i)+"頁第"+str(j)+"段子內(nèi)容為:") print(datalist[j]) class two(threading.Thread): #爬取奇數(shù)頁內(nèi)容 def __init__(self): threading.Thread.__init__(self) def run(self): for i in range(2,12,2): url = "https://www.qiushibaike.com/8hr/page/"+str(i)+"/" pagedata = urllib.request.urlopen(url).read().decode("utf-8","ignore") pattern = '<div class="content">.*?<span>(.*?)</span>(.*?)</div>' datalist = re.compile(pattern,re.S).findall(pagedata) for j in range(0,len(datalist)): print("第"+str(i)+"頁第"+str(j)+"段子內(nèi)容為:") print(datalist[j]) t1 = one() t2 = two() t1.start() t2.start()
以上這篇Python多線程爬蟲實(shí)戰(zhàn)_爬取糗事百科段子的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python?OpenCV超詳細(xì)講解調(diào)整大小與圖像操作的實(shí)現(xiàn)
OpenCV用C++語言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實(shí)時(shí)視覺應(yīng)用,并在可用時(shí)利用MMX和SSE指令,本篇文章帶你通過OpenCV實(shí)現(xiàn)重調(diào)大小與圖像裁剪2022-04-04PyTorch上搭建簡單神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)回歸和分類的示例
本篇文章主要介紹了PyTorch上搭建簡單神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)回歸和分類的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04使用python實(shí)現(xiàn)一個(gè)簡單的圖片爬蟲
在本文中,我們將學(xué)習(xí)如何使用Python創(chuàng)建一個(gè)簡單的圖片爬蟲,我們將利用requests庫來發(fā)送HTTP請求,BeautifulSoup庫來解析HTML頁面,以及os和shutil庫來下載和保存圖片,通過這個(gè)教程,你將學(xué)會如何爬取網(wǎng)頁上的圖片并保存到本地,需要的朋友可以參考下2024-02-02Python 識別12306圖片驗(yàn)證碼物品的實(shí)現(xiàn)示例
這篇文章主要介紹了Python 識別12306圖片驗(yàn)證碼物品的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01python中獲得當(dāng)前目錄和上級目錄的實(shí)現(xiàn)方法
這篇文章主要介紹了python中獲得當(dāng)前目錄和上級目錄的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-10-10Django框架實(shí)現(xiàn)在線考試系統(tǒng)的示例代碼
這篇文章主要介紹了Django框架實(shí)現(xiàn)在線考試系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11