在進行爬蟲工作的時候,考慮到爬蟲執行的速度慢,那麼怎樣提公升爬蟲的速度呢,那麼就得使用多執行緒爬蟲了,接下來我以糗事百科段子的爬取進行對多執行緒爬蟲的概述:
github鏈結
鏈結一:不使用多執行緒爬取糗事百科
1.上**:
import urllib.request
import re
headers=
for i in range(1, 30):
url = ''.format(i)
r = urllib.request.request(url=url, headers=headers)
rr = urllib.request.urlopen(r).read().decode('utf-8')
result = re.compile('.*?', re.s).findall(str(rr))
for j in range(0, len(result)):
results = str(result[j]).replace(r'', '').replace('', '').replace(
'', '').replace(r'\n', '').replace('', '')
print("第" + str(i) + "頁" + "第" + str(j) + "個段子" + results)
2.首先分析網頁
可以分析的出每頁的變化在url中變化的是page/+頁碼/
這樣可以構造url進行分頁爬取
**如下
for i in range(1, 30):
url = ''.format(i)
3.然後進行對網頁源**的得到
r = urllib.request.request(url=url, headers=headers)
rr = urllib.request.urlopen(r).read().decode('utf-8')
4.使用正則進行對需要的內容的提取
可以分析得到正規表示式
result = re.compile('.*?', re.s).findall(str(rr))
5.進行進一步處理去掉不需要的內容和進行輸出
for j in range(0, len(result)):
results = str(result[j]).replace(r'', '').replace('', '').replace(
'', '').replace(r'\n', '').replace('', '')
print("第" + str(i) + "頁" + "第" + str(j) + "個段子" + results)
二:改寫為多執行緒爬蟲1.上**:
import urllib.request
import threading
import re
headers=
class one(threading .thread ):
def __init__(self):
threading.thread.__init__(self)
def run(self):
for i in range(1,30,2):
url = ''.format(i)
r = urllib.request.request(url=url, headers=headers)
rr = urllib.request.urlopen(r).read().decode('utf-8')
result = re.compile('.*?', re.s).findall(str(rr))
for j in range(0, len(result)):
results = str(result[j]).replace(r'', '').replace('', '').replace(
'', '').replace(r'\n', '').replace('', '')
print("第" + str(i) + "頁" + "第" + str(j) + "個段子" + results)
class two(threading.thread ):
def __init__(self):
threading .thread.__init__(self)
def run(self):
for i in range(2, 30, 2):
url = ''.format(i)
r = urllib.request.request(url=url, headers=headers)
rr = urllib.request.urlopen(r).read().decode('utf-8')
result = re.compile('.*?', re.s).findall(str(rr))
for j in range(0, len(result)):
results = str(result[j]).replace(r'', '').replace('', '').replace(
'', '').replace(r'\n', '').replace('', '')
print("第" + str(i) + "頁" + "第" + str(j) + "個段子" + results)
t1=one()
t1.start()
t2=two()
t2.start()
2.**講解
使用了兩個執行緒one和two分別對奇數頁和偶數頁進行爬取
首先我們需要了解多執行緒爬蟲,以下是乙個最簡單的多執行緒:
class one(threading .thread ):
def __init__(self):
threading.thread.__init__(self)
def run(self):
for i in range(1,10):
print("a)
class two(threading.thread ):
def __init__(self):
threading .thread.__init__(self)
def run(self):
print("b)
t1=one()
t1.start()
t2=two()
t2.start()
執行以後會同時進行列印a和列印b的步驟,但是順序不定這樣就達到了兩個程序同時進行的目的
因此參考上面可以得到那個糗事百科的多執行緒爬蟲**
Python爬蟲 初探多執行緒爬蟲
上篇,我們已經建立了乙個基本的爬蟲,用來抓取動態網頁的資訊。經過測試,爬蟲的速度太慢,我們需要改進。這篇我會介紹如何實現乙個多執行緒的python爬蟲來提高抓取網頁的效率。很多人都說因為python的gil gil規定每個時刻只能有乙個執行緒訪問python虛擬機器 限制,不應該用多執行緒,而應該用...
python多執行緒爬蟲
先記錄一下,普通的糗事百科爬蟲 import urllib.request import re import time import urllib.error headers user agent mozilla 5.0 windows nt 10.0 win64 x64 rv 63.0 gecko...
python多執行緒爬蟲
python多執行緒爬蟲 python單執行緒爬蟲對於應付小規模資料是可以的,但是面對大量資料,我們就要用到多執行緒爬蟲技術。使用多執行緒,一方面可能會加快效率,另一方面可以施加一些小技巧,如不同的執行緒使用不同的 ip從而避免出發反爬機制。python 多執行緒 python的多執行緒可以用thr...