使用程序池抓取貓眼資料

2021-08-21 21:28:04 字數 1774 閱讀 5385

#引入cookjar來放在cookie過期

#新增ua來簡單防止反爬

opener.addheaders =[('user-agent','mozilla/5.0 (windows nt 6.1; wow64; rv:61.0) gecko/20100101 firefox/61.0')]

def write_to_file(dic):

#    將字典轉換成json字串寫入檔案方便呼叫

dic_json  = json.dumps(dic,ensure_ascii=false)

with open('maoyan.txt','a',encoding='utf-8') as f:

f.write(dic_json+'\n')

return none

def get_file(html):

#    建立正規表示式物件對得到的html進行匹配

pattern =re.compile('[\s\s]*?title="([\s\s]*?)"[\s\s]*? '

'([\s\s]*?)

[\s\s]*?([\s\s]*?)

')    result = re.findall(pattern,html)

#    將匹配的可迭代物件進行遍歷,生成生成器傳出

for i in result:

yield

def get_html(lock,offset):

#    拼接目標url 使用request的方法爬取資訊

url = ''+str(offset)

req = request.request(url)

#    判斷是否成功請求**

if opener.open(req).code ==200:

html = opener.open(req).read().decode()

else:

return none

for i in get_file(html):

#        通過加鎖的形式來保證寫入檔案的準確率

lock.acquire()

write_to_file(i)

lock.release()

if __name__ == '__main__':

#    從manage裡獲取lock鎖 並且使用functools 對原函式增加新變數

manager = manager()

lock = manager.lock()

new_get_html =functools.partial(get_html,lock)

#    使用程序池加快獲取速度

pool = pool()

pool.map(new_get_html,[i*10 for i in range(10)])

#關閉程序池

pool.close()

pool.join()

python多程序抓取貓眼電影top

pip install requests 使用第三方庫requests抓取,import requests import re import json import multiprocessing from requests import requestexception 獲取要抓取網頁源 defg...

多程序抓取貓眼電影top100

import json from multiprocessing import pool import requests from requests.exceptions import requestexception import re 建構函式,輸入乙個url 傳送請求後返回該 的響應結果 de...

資料探勘 多程序抓取

之前說過python的多執行緒只能執行在乙個單核上,也就是各執行緒是以併發的方式非同步執行的 這篇文章我們來聊聊python多程序的方式 多程序依賴於所在機器的處理器個數,在多核機器上進行多程序程式設計時,各核上執行的程序之間是並行執行的,可以利用程序池,是每乙個核心上執行乙個程序,當翅中的程序數量...