所謂多執行緒,即程式中的某些程式段並行執行,合理地設定多執行緒 ,可使爬蟲效率更高。
例:普通的糗事百科段子爬蟲
import urllib.request
import re
import urllib.error
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)
for i in range(1,3):
url=""+str(i)
pagedata=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='.*?(.*?).*?
' datalist=re.compile(pat,re.s).findall(pagedata)
for j in range(0,len(datalist)):
print("第"+str(i)+"頁第"+str(j)+"個段子內容是:")
print(datalist[j])
建立執行緒的基本格式:
import threading
class a(threading.thread):
def __init__(self):
threading.thread.__init__(self)
def run(self):
for i in range(0,10):
print("我是執行緒a")
class b(threading.thread):
def __init__(self):
threading.thread.__init__(self)
def run(self):
for i in range(0,10):
print("我是執行緒b")
例:將糗事百科爬蟲改為多執行緒爬蟲
import urllib.request
import threading
import re
import urllib.error
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)
class one(threading.thread):
def __init__(self):
threading.thread.__init__(self)
def run(self):
for i in range(1,10,2):
url=""+str(i)
pagedata=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='.*?(.*?).*?
' datalist=re.compile(pat,re.s).findall(pagedata)
for j in range(0,len(datalist)):
try:
print("第"+str(i)+"頁第"+str(j)+"個段子內容是:")
print(datalist[j])
except urllib.error.urlerror as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
except exception as e:
print(e)
class two(threading.thread):
def __init__(self):
threading.thread.__init__(self)
def run(self):
for i in range(2,11,2):
url=""+str(i)
pagedata=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='.*?(.*?).*?
' datalist=re.compile(pat,re.s).findall(pagedata)
for j in range(0,len(datalist)):
print("第"+str(i)+"頁第"+str(j)+"個段子內容是:")
使用多執行緒可交叉執行,比單執行緒執行時間短,速度更快
python的異常學習簡總
python中常見的異常型別 nameerror 嘗試訪問乙個為申明的變數。zerodivisionerror 除數為零錯誤。syntaxerror 直譯器語法錯誤,這是乙個唯一不在執行時發生的異常,在執行前直譯器就會顯示其錯誤。indexerror 請求的索引超出範圍。keyerror 請求乙個不...
Xamarin for android學習總結一
1.adapter就是資料讀入記憶體後的 記憶體中介 2.intend,broadcast,server,provider,activity,執行關係圖 3.toast用於向使用者顯示一些幫助 提示 c 中toast是由其他執行緒呼叫更新ui主線程之用 4.android中ui執行緒與後台執行緒互動...
SOPC Builder Nios學習經驗總結
上的不一致。3.在nois ii中bulid例程hello world都出現了錯誤,錯誤提示為 gdrive c altera kits nios2 components altera nios2 hal src alt busy sleep.c 68 error parse error befor...