
網頁分析
網址:百度圖片:超前消費
因為我下一場直播(2021.4.24)的主題是超前消費,那就爬超前消費主題的圖片吧,
看了一下,這個網頁是下拉式的動態網頁,根據我們前幾篇的經驗,直接找網路包吧,也不要花太多時間了,
不過在網路包這里栽了跟頭,浪費了一些時間,因為:
網址的結構是這樣的(僅放不同)
'pn=30&rn=30&gsm=1e&1619227748027='
'pn=60&rn=30&gsm=3c&1619227748310='
'pn=90&rn=30&gsm=5a&1619227779562='
'pn=120&rn=30&gsm=78&1619227779728='
gsm的規律好找,后面那個規律不好找啊!!!
(時間戳加上三個亂數)
關于執行緒與執行緒池的理論基礎在這篇里面:精寫15篇,學會Python爬蟲 – (7)執行緒、互斥鎖、執行緒池丨蓄力計劃
需要多了解的小伙伴點擊藍字即可,
代碼實作
import threadpool
import requests
import json
import random
data_list = []
user_agent_list = [
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
]
def get_url(url):
try:
res = requests.get(url, headers={"User-Agent": random.choice(user_agent_list)}).content
data = json.loads(res)['data']
for d in data:
data_list.append(d['thumbURL'])
except:
print('failed' + url)
def get_pic(url):
'''
這是一個處理資料的函式,即將被送入執行緒池
:param url: 網址
:return: 無
'''
pic = requests.get(url).content
# 把Reponse物件的內容以二進制資料的形式回傳
name = url.replace('https://ss0.bdstatic.com/','').replace(',','').replace('/','')
photo = open(name, 'wb')
# 新建了一個檔案ppt.jpg,這里的檔案沒加路徑,它會被保存在程式運行的當前目錄下,
# 圖片內容需要以二進制wb讀寫,你在學習open()函式時接觸過它,
photo.write(pic)
# 獲取pic的二進制內容
photo.close()
# 關閉檔案
def Thread_Pool(outdata, datalist=None, Thread_num=5):
'''
執行緒池操作,創建執行緒池、規定執行緒池執行任務、將任務放入執行緒池中、收工
:param outdata: 函式指標,執行緒池執行的任務
:param datalist: 給前面的函式指標傳入的引數串列
:param Thread_num: 初始化執行緒數
:return: 暫無
'''
pool = threadpool.ThreadPool(Thread_num) # 創建Thread_num個執行緒
tasks = threadpool.makeRequests(outdata, datalist) # 規定執行緒執行的任務
# outdata是函式名,datalist是一個引數串列,執行緒池會依次提取datalist中的引數引入到函式中來執行函式,所以引數串列的長度也就是執行緒池所要執行的任務數量,
[pool.putRequest(req) for req in tasks] # 將將要執行的任務放入執行緒池中
pool.wait() # 等待所有子執行緒執行完之后退出
def main():
url_list = ['太占地方啦,自己扒拉幾個包吧']
Thread_Pool(get_url, datalist=url_list)
Thread_Pool(get_pic, datalist=data_list)
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280360.html
標籤:python
上一篇:Python 零基礎入門到實戰(四)筆記:標準庫和第三方包、模塊、檔案讀寫、捕獲例外處理、總結
下一篇:安裝python包出現Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))
