python爬蟲 多執行緒爬蟲

2021-09-26 19:09:45 字數 3699 閱讀 2043

在進行爬蟲工作的時候,考慮到爬蟲執行的速度慢,那麼怎樣提公升爬蟲的速度呢,那麼就得使用多執行緒爬蟲了,接下來我以糗事百科段子的爬取進行對多執行緒爬蟲的概述:

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...