使用多執行緒爬取資料

2021-09-10 08:34:48 字數 2232 閱讀 3406

應用名稱

應用鏈結

import requests

import time

from multiprocessing import queue

from threading import thread

import json

import urllib.parse

class

xiaomispider

(object):

def__init__

(self)

: self.url =

self.headers =

# url佇列

self.urlqueue = queue(

)# 解析佇列

self.parsequeue = queue(

)# url入佇列

defgeturl

(self)

:# 生成10個url位址,放到佇列中

for page in

range(50

):params =

params = urllib.parse.urlencode(params)

# 把拼接的url放到url佇列中

fullurl = self.url + params

self.urlqueue.put(fullurl)

# 採集執行緒事件函式,發請求,把html給解析佇列

defgethtml

(self)

:while

true

:# 如果佇列不為空,則獲取url

ifnot self.urlqueue.empty():

url = self.urlqueue.get(

)# 三步走

res = requests.get(url,headers=self.headers)

res.encoding =

'utf-8'

html = res.text

# 把html發到解析佇列

self.parsequeue.put(html)

else

:break

# 解析執行緒事件函式,從解析佇列get,提取並處理資料

defparsehtml

(self)

:while

true

:# 把html轉換成json格式

try:

html = self.parsequeue.get(block=

true

,timeout=2)

hlist = json.loads(html)

['data'

]# hlist : [,{},{}]

for h in hlist:

# 應用名稱

name = h[

'displayname'

]# 應用鏈結

d =with

open

('xiaomi.json'

,'a'

)as f:

f.write(

str(d)

+'\n'

)except

:break

# 主函式

defworkon

(self)

:# url入佇列

self.geturl(

)# 存放所有採集執行緒物件的列表

tlist =

# 存放所有解析執行緒物件的列表

# 採集執行緒開始執行

for i in

range(5

):t = thread(target=self.gethtml)

t.start(

)# 解析執行緒開始執行

for i in

range(5

):t = thread(target=self.parsehtml)

t.start(

)# 統一**解析執行緒

for i in tlist:

i.join(

)if __name__ ==

'__main__'

: begin = time.time(

) spider = xiaomispider(

) spider.workon(

) end = time.time(

)print(%

(end-begin)

)

回顧多執行緒爬取資料

明確目的 將多執行緒爬蟲涉及到的技術點回顧一下 首先,是基本流程,多執行緒爬蟲架構圖如下 用來存url,和 網頁的響應內容,給執行緒提供資料執行緒資料 class queue object enqueue item 往佇列中新增乙個item元素 dequeue 從佇列頭部刪除乙個元素 is empt...

python使用多執行緒爬取表情包

使用多執行緒爬取資料可以顯著提高效率 編輯環境 pycharm 目標 爬取表情包庫的所有表情包 首先在同目錄下建乙個images資料夾 如下 coding utf8 import os import threading import requests import urllib from bs4 i...

多執行緒爬取小公尺應用商店

目標 2 目標 所有應用分類 應用名稱 應用鏈結 實現步驟 1 頁面區域性重新整理 2 右鍵檢視網頁源 搜尋關鍵字未搜到 此 為動態載入 需要抓取網路資料報分析1 抓取返回json資料的url位址 headers中的request url 302 檢視並分析查詢引數 headers中的query s...