python爬蟲(chóng)增加多線程獲取數(shù)據(jù)

Python爬蟲(chóng)應(yīng)用領(lǐng)域廣泛舷暮,并且在數(shù)據(jù)爬取領(lǐng)域處于霸主位置,并且擁有很多性能好的框架噩茄,像Scrapy下面、Request、BeautifuSoap绩聘、urlib等框架可以實(shí)現(xiàn)爬行自如的功能沥割,只要有能爬取的數(shù)據(jù)耗啦,Python爬蟲(chóng)均可實(shí)現(xiàn)。數(shù)據(jù)信息采集離不開(kāi)Python爬蟲(chóng)驯遇,而python爬蟲(chóng)離不開(kāi)代理ip芹彬,他們的結(jié)合可以做的事情很多,如廣告營(yíng)銷叉庐、各種數(shù)據(jù)采集大數(shù)據(jù)分析,人工智能等会喝,特別是在數(shù)據(jù)的抓取方面可以產(chǎn)生的作用巨大陡叠。
既然爬蟲(chóng)代理ip是python網(wǎng)絡(luò)爬蟲(chóng)不可缺少的部分,那高質(zhì)量的肢执,ip資源豐富遍布全國(guó)的枉阵,高匿極速穩(wěn)定http代理,非常適合python網(wǎng)絡(luò)爬蟲(chóng)運(yùn)用場(chǎng)景预茄。比如在有優(yōu)質(zhì)代理IP的前提下使用python實(shí)現(xiàn)百度網(wǎng)頁(yè)采集兴溜,增加多線程處理,同時(shí)對(duì)百度返回的內(nèi)容進(jìn)行分類統(tǒng)計(jì)耻陕,實(shí)現(xiàn)代碼如下:
import asyncio
import aiohttp
import threading
from collections import Counter

定義一個(gè)全局變量拙徽,用于存儲(chǔ)分類結(jié)果

categories = Counter()

定義一個(gè)函數(shù),用于根據(jù)文本內(nèi)容進(jìn)行分類

def classify(text):
# 這里可以使用任何文本分類的方法诗宣,例如正則表達(dá)式膘怕、機(jī)器學(xué)習(xí)等
# 這里為了簡(jiǎn)單起見(jiàn),只使用了簡(jiǎn)單的字符串匹配
if "Python" in text:
return "Python"
elif "Java" in text:
return "Java"
elif "C++" in text:
return "C++"
else:
return "Other"

async def fetch_page(url, proxy):
# 創(chuàng)建一個(gè) aiohttp 的 ClientSession 對(duì)象召庞,并指定代理IP和端口
async with aiohttp.ClientSession(proxy=proxy) as session:
# 使用 session.get 方法發(fā)送請(qǐng)求岛心,并獲取響應(yīng)對(duì)象
async with session.get(url) as response:
# 返回響應(yīng)的文本內(nèi)容
return await response.text()

async def main():
urls = ["https://www.baidu.com/s?wd=" + str(i) for i in range(10)] # 生成十個(gè)百度搜索網(wǎng)址

# 假設(shè)有一個(gè)文件 16yun.txt,每行存儲(chǔ)一個(gè)代理host和端口篮灼,例如 www.16yun.cn:3333
# 讀取文件中的所有代理忘古,并存儲(chǔ)在一個(gè)列表中
with open("16yun.txt") as f:
    proxies = [line.strip() for line in f]

tasks = [] # 創(chuàng)建一個(gè)空列表,用于存儲(chǔ) task 對(duì)象

# 遍歷 urls 和 proxies 列表诅诱,為每個(gè) url 配對(duì)一個(gè) proxy髓堪,并創(chuàng)建 task 對(duì)象
for url, proxy in zip(urls, proxies):
    task = asyncio.create_task(fetch_page(url, proxy))
    tasks.append(task)

results = await asyncio.gather(*tasks) # 同時(shí)運(yùn)行所有 task 并獲取結(jié)果

# 創(chuàng)建一個(gè)線程池,用于執(zhí)行分類任務(wù)
pool = threading.ThreadPoolExecutor(max_workers=4)

for result in results:
    print(result[:100]) # 打印每個(gè)網(wǎng)頁(yè)的前 100 個(gè)字符
    
    # 使用線程池提交一個(gè)分類任務(wù)逢艘,并更新全局變量 categories
    category = pool.submit(classify, result).result()
    categories[category] += 1

# 關(guān)閉線程池并等待所有任務(wù)完成
pool.shutdown(wait=True)

# 打印最終的分類結(jié)果
print(categories)

asyncio.run(main()) # 運(yùn)行主協(xié)程
通過(guò)上面的代碼實(shí)現(xiàn)數(shù)據(jù)抓取后旦袋,我們也可以簡(jiǎn)單的根據(jù)數(shù)據(jù)來(lái)分析下代理ip池要求。
通過(guò)獲取的數(shù)據(jù)量它改,能夠大概了解需要訪問(wèn)多少網(wǎng)頁(yè)疤孕,通過(guò)目標(biāo)網(wǎng)站的反爬策略,能大概知道需要多少代理ip央拖,需要多大的代理ip池祭阀。假設(shè)要訪問(wèn)50萬(wàn)個(gè)頁(yè)面鹉戚,每個(gè)ip能訪40個(gè)頁(yè)面后會(huì)觸發(fā)反爬機(jī)制,那大概需要1萬(wàn)左右不重復(fù)的代理ip专控。這只是簡(jiǎn)單的一個(gè)計(jì)算抹凳,網(wǎng)站不同,反爬機(jī)制不同伦腐,對(duì)IP的需求是要以實(shí)際測(cè)試的數(shù)據(jù)為準(zhǔn)的赢底。在我們使用代理ip時(shí),如何使爬蟲(chóng)更有效的進(jìn)行柏蘑,在爬蟲(chóng)采集數(shù)據(jù)信息需要注意哪些地方幸冻,我們一起來(lái)分析如何更有效的采集到數(shù)據(jù)信息,提高工作效率咳焚,下一次分享給大家參考洽损。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市革半,隨后出現(xiàn)的幾起案子碑定,更是在濱河造成了極大的恐慌,老刑警劉巖又官,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件延刘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赏胚,警方通過(guò)查閱死者的電腦和手機(jī)访娶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)觉阅,“玉大人崖疤,你說(shuō)我怎么就攤上這事〉溆拢” “怎么了劫哼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)割笙。 經(jīng)常有香客問(wèn)我权烧,道長(zhǎng),這世上最難降的妖魔是什么伤溉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任般码,我火速辦了婚禮,結(jié)果婚禮上乱顾,老公的妹妹穿的比我還像新娘板祝。我一直安慰自己,他們只是感情好走净,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布券时。 她就那樣靜靜地躺著孤里,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橘洞。 梳的紋絲不亂的頭發(fā)上捌袜,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音炸枣,去河邊找鬼虏等。 笑死,一個(gè)胖子當(dāng)著我的面吹牛适肠,可吹牛的內(nèi)容都是我干的博其。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼迂猴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了背伴?” 一聲冷哼從身側(cè)響起沸毁,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎傻寂,沒(méi)想到半個(gè)月后息尺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疾掰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年搂誉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片静檬。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炭懊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拂檩,到底是詐尸還是另有隱情侮腹,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布稻励,位于F島的核電站父阻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏望抽。R本人自食惡果不足惜加矛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煤篙。 院中可真熱鬧斟览,春花似錦、人聲如沸舰蟆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至味悄,卻和暖如春草戈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侍瑟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工唐片, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涨颜。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓费韭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庭瑰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子星持,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容