應用名稱
應用鏈結
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...