欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python多線程批量采集圖片的代碼實(shí)現(xiàn)

 更新時(shí)間:2024年05月08日 09:23:25   作者:愛(ài)吃餅干的小白鼠  
這篇文章主要給大家介紹了Python多線程批量采集圖片的代碼實(shí)現(xiàn),文中通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下

前言

本文來(lái)介紹如何多線程采集圖片,多線程效率更快,但是,我們單一IP請(qǐng)求過(guò)于頻繁,可能會(huì)被反爬,被封IP,所以,我們就要用到IP代理池,大家可以自己去網(wǎng)上找。

環(huán)境使用

  • python 3.9
  • pycharm

模塊使用

  • requests

模塊介紹

  • requests

requests是一個(gè)很實(shí)用的Python HTTP客戶(hù)端庫(kù),爬蟲(chóng)和測(cè)試服務(wù)器響應(yīng)數(shù)據(jù)時(shí)經(jīng)常會(huì)用到,requests是Python語(yǔ)言的第三方的庫(kù),專(zhuān)門(mén)用于發(fā)送HTTP請(qǐng)求,使用起來(lái)比urllib簡(jiǎn)潔很多。

  • parsel

parsel是一個(gè)python的第三方庫(kù),相當(dāng)于css選擇器+xpath+re。

parsel由scrapy團(tuán)隊(duì)開(kāi)發(fā),是將scrapy中的parsel獨(dú)立抽取出來(lái)的,可以輕松解析html,xml內(nèi)容,獲取需要的數(shù)據(jù)。

相比于BeautifulSoup,xpath,parsel效率更高,使用更簡(jiǎn)單。

  • re

re模塊是python獨(dú)有的匹配字符串的模塊,該模塊中提供的很多功能是基于正則表達(dá)式實(shí)現(xiàn)的,而正則表達(dá)式是對(duì)字符串進(jìn)行模糊匹配,提取自己需要的字符串部分,他對(duì)所有的語(yǔ)言都通用。

  • os

os 就是 “operating system” 的縮寫(xiě),顧名思義,os模塊提供的就是各種 Python 程序與操作系統(tǒng)進(jìn)行交互的接口。通過(guò)使用 os 模塊,一方面可以方便地與操作系統(tǒng)進(jìn)行交互,另一方面也可以極大增強(qiáng)代碼的可移植性。

  • csv

它是一種文件格式,一般也被叫做逗號(hào)分隔值文件,可以使用 Excel 軟件或者文本文檔打開(kāi) 。其中數(shù)據(jù)字段用半角逗號(hào)間隔(也可以使用其它字符),使用 Excel 打開(kāi)時(shí),逗號(hào)會(huì)被轉(zhuǎn)換為分隔符。csv 文件是以純文本形式存儲(chǔ)了表格數(shù)據(jù),并且在兼容各個(gè)操作系統(tǒng)。

模塊安裝問(wèn)題:

  • 如果安裝python第三方模塊:

win + R 輸入 cmd 點(diǎn)擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車(chē)

在pycharm中點(diǎn)擊Terminal(終端) 輸入安裝命令

  • 安裝失敗原因:
  • 失敗一: pip 不是內(nèi)部命令

解決方法: 設(shè)置環(huán)境變量

  • 失敗二: 出現(xiàn)大量報(bào)紅 (read time out)

解決方法: 因?yàn)槭蔷W(wǎng)絡(luò)鏈接超時(shí), 需要切換鏡像源

    清華:https://pypi.tuna.tsinghua.edu.cn/simple
? ? 阿里云:https://mirrors.aliyun.com/pypi/simple/
? ? 中國(guó)科技大學(xué) https://pypi.mirrors.ustc.edu.cn/simple/
? ? 華中理工大學(xué):https://pypi.hustunique.com/
? ? 山東理工大學(xué):https://pypi.sdutlinux.org/
? ? 豆瓣:https://pypi.douban.com/simple/
? ? 例如:pip3 install -i https://pypi.doubanio.com/simple/ 模塊名
  • 失敗三: cmd里面顯示已經(jīng)安裝過(guò)了, 或者安裝成功了, 但是在pycharm里面還是無(wú)法導(dǎo)入

解決方法: 可能安裝了多個(gè)python版本 (anaconda 或者 python 安裝一個(gè)即可) 卸載一個(gè)就好,或者你pycharm里面python解釋器沒(méi)有設(shè)置好。

代碼實(shí)現(xiàn)

什么是代理ip池?

通俗地比喻一下,它就是一個(gè)池子,里面裝了很多代理ip。它有如下的行為特征:

  • 池子里的ip是有生命周期的,它們將被定期驗(yàn)證,其中失效的將被從池子里面剔除。
  • 池子里的ip是有補(bǔ)充渠道的,會(huì)有新的代理ip不斷被加入池子中。
  • 池子中的代理ip是可以被隨機(jī)取出的。

這樣,代理池中始終有多個(gè)不斷更換的、有效的代理ip,且我們可以隨機(jī)從池子中取出代理ip,然后讓爬蟲(chóng)程序使用代理ip訪問(wèn)目標(biāo)網(wǎng)站,就可以避免爬蟲(chóng)被ban的情況。

如何使用呢?

import requests
 
f = open('IP.txt',"r")
 
file = f.readline
 
item = []
 
for proxies in file:
 
    proxies =eval(proxies.replace('',''))
    item.append(proxies)
proxies = random.choice(item)
response = requests.get(url=url,headers=headers,proxies=proxies)
print(response)

我們這里先是把IP保存到了一個(gè)文件里面,我們?cè)谡?qǐng)求的時(shí)候加入proxies參數(shù)即可,這里的url就填我們要請(qǐng)求的網(wǎng)址。

批量采集

接下來(lái),我們就進(jìn)入到我們的正式學(xué)習(xí)中,我們今天請(qǐng)求的是某大學(xué)網(wǎng)站,由于涉及到隱私,網(wǎng)址不發(fā)了,這里教一個(gè)思路,其他網(wǎng)站也是一樣的。

單線程

我們先試試單線程采集80張圖片需要多少秒?

import re
import requests
import datetime
urls = []

startime = datetime.datetime.now()

def download(url):
    name = re.findall('(\d+).jpg',url)[0]
    img_content = requests.get(url=url).content
    with open('img\' +name+'.jpeg', mode='wb') as f:
        f.write(img_content)

for i in range(1,80):
    url = f"http://**********/student/{i}.jpg"
    urls.append(url)
for url in urls:
    download(url)

endtime = datetime.datetime.now()
print((endtime-startime).seconds)

我們這里就是把我們所有要下載的地址遍歷到urls里面去,然后執(zhí)行下載圖片函數(shù),我這里用時(shí)28秒,我們看看多線程多快。

多線程

我們這里加上多線程,多線程的數(shù)量取決于你的電腦性能,話不多說(shuō),直接上代碼。

from concurrent.futures import ThreadPoolExecutor
import re
import requests
import datetime
urls = []

startime = datetime.datetime.now()

def download(url):
    name = re.findall('(\d+).jpg',url)[0]
    img_content = requests.get(url=url).content
    with open('img\' +name+'.jpeg', mode='wb') as f:
        f.write(img_content)

for i in range(1,80):
    url = f"http://**********/student/{i}.jpg"
    urls.append(url)
with ThreadPoolExecutor(max_workers=10) as executor:
    for url in urls:
        executor.submit(download,url)

endtime = datetime.datetime.now()
print((endtime-startime).seconds)

我們這里開(kāi)了10個(gè)線程,下載完80張圖片,只要3s,提升了很快,當(dāng)我們的圖片很多的時(shí)候,我們多線程的優(yōu)勢(shì)越來(lái)越明顯。

總結(jié)

有的網(wǎng)站會(huì)限制IP,所以,我們就要用到IP代理池,本文就到這里了。

到此這篇關(guān)于Python多線程批量采集圖片的代碼實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python多線程采集圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python調(diào)用java模塊SmartXLS和jpype修改excel文件的方法

    python調(diào)用java模塊SmartXLS和jpype修改excel文件的方法

    這篇文章主要介紹了python調(diào)用java模塊SmartXLS和jpype修改excel文件的方法,涉及Python調(diào)用java模塊的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python協(xié)程的實(shí)現(xiàn)方式小結(jié)

    Python協(xié)程的實(shí)現(xiàn)方式小結(jié)

    協(xié)程是Python中強(qiáng)大的并發(fā)編程工具,允許開(kāi)發(fā)者編寫(xiě)異步代碼以提高程序的性能和效率,在本文中,我們將深入探討Python中協(xié)程的實(shí)現(xiàn)方式,包括生成器、asyncio庫(kù)和async/await關(guān)鍵字,我們還會(huì)提供詳細(xì)的示例代碼,幫助您理解和應(yīng)用協(xié)程,需要的朋友可以參考下
    2023-11-11
  • Pandas讀寫(xiě)CSV文件的方法示例

    Pandas讀寫(xiě)CSV文件的方法示例

    這篇文章主要介紹了Pandas讀寫(xiě)CSV文件的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Django使用中間鍵實(shí)現(xiàn)csrf認(rèn)證詳解

    Django使用中間鍵實(shí)現(xiàn)csrf認(rèn)證詳解

    這篇文章主要介紹了Django使用中間鍵實(shí)現(xiàn)csrf認(rèn)證詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python 二進(jìn)制字節(jié)流數(shù)據(jù)的讀取操作(bytes與bitstring)

    Python 二進(jìn)制字節(jié)流數(shù)據(jù)的讀取操作(bytes與bitstring)

    本文主要介紹了Python 二進(jìn)制字節(jié)流數(shù)據(jù)的讀取操作(bytes與bitstring),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python使用tkinter實(shí)現(xiàn)透明窗體上繪制隨機(jī)出現(xiàn)的小球(實(shí)例代碼)

    python使用tkinter實(shí)現(xiàn)透明窗體上繪制隨機(jī)出現(xiàn)的小球(實(shí)例代碼)

    今天教大家怎么實(shí)現(xiàn)Tkinter透明窗體,在上篇文章給大家介紹過(guò)透明窗體上繪制小球,今天接著通過(guò)實(shí)例代碼給大家分享python使用tkinter實(shí)現(xiàn)透明窗體上繪制隨機(jī)出現(xiàn)的小球的實(shí)例代碼,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • numpy 返回函數(shù)的上三角矩陣實(shí)例

    numpy 返回函數(shù)的上三角矩陣實(shí)例

    今天小編就為大家分享一篇numpy 返回函數(shù)的上三角矩陣實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Django視圖和URL配置詳解

    Django視圖和URL配置詳解

    這篇文章主要介紹了Django視圖和URL配置詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • python爬蟲(chóng)中PhantomJS加載頁(yè)面的實(shí)例方法

    python爬蟲(chóng)中PhantomJS加載頁(yè)面的實(shí)例方法

    在本篇文章里小編給大家整理了關(guān)于python爬蟲(chóng)中PhantomJS加載頁(yè)面的實(shí)例方法,有需要的朋友們可以參考下。
    2020-11-11
  • Python設(shè)計(jì)實(shí)現(xiàn)的計(jì)算器功能完整實(shí)例

    Python設(shè)計(jì)實(shí)現(xiàn)的計(jì)算器功能完整實(shí)例

    這篇文章主要介紹了Python設(shè)計(jì)實(shí)現(xiàn)的計(jì)算器功能,結(jié)合完整實(shí)例形式分析了Python3.5實(shí)現(xiàn)計(jì)算器功能的正則、字符串及數(shù)值運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08

最新評(píng)論