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

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

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

前言

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

環(huán)境使用

  • python 3.9
  • pycharm

模塊使用

  • requests

模塊介紹

  • requests

requests是一個很實用的Python HTTP客戶端庫,爬蟲和測試服務(wù)器響應(yīng)數(shù)據(jù)時經(jīng)常會用到,requests是Python語言的第三方的庫,專門用于發(fā)送HTTP請求,使用起來比urllib簡潔很多。

  • parsel

parsel是一個python的第三方庫,相當于css選擇器+xpath+re。

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

相比于BeautifulSoup,xpath,parsel效率更高,使用更簡單。

  • re

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

  • os

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

  • csv

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

模塊安裝問題:

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

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

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

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

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

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

解決方法: 因為是網(wǎng)絡(luò)鏈接超時, 需要切換鏡像源

    清華:https://pypi.tuna.tsinghua.edu.cn/simple
? ? 阿里云:https://mirrors.aliyun.com/pypi/simple/
? ? 中國科技大學(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)安裝過了, 或者安裝成功了, 但是在pycharm里面還是無法導(dǎo)入

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

代碼實現(xiàn)

什么是代理ip池?

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

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

這樣,代理池中始終有多個不斷更換的、有效的代理ip,且我們可以隨機從池子中取出代理ip,然后讓爬蟲程序使用代理ip訪問目標網(wǎ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保存到了一個文件里面,我們在請求的時候加入proxies參數(shù)即可,這里的url就填我們要請求的網(wǎng)址。

批量采集

接下來,我們就進入到我們的正式學(xué)習(xí)中,我們今天請求的是某大學(xué)網(wǎng)站,由于涉及到隱私,網(wǎng)址不發(fā)了,這里教一個思路,其他網(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ù),我這里用時28秒,我們看看多線程多快。

多線程

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

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)

我們這里開了10個線程,下載完80張圖片,只要3s,提升了很快,當我們的圖片很多的時候,我們多線程的優(yōu)勢越來越明顯。

總結(jié)

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

到此這篇關(guān)于Python多線程批量采集圖片的代碼實現(xiàn)的文章就介紹到這了,更多相關(guān)Python多線程采集圖片內(nèi)容請搜索腳本之家以前的文章或繼續(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)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Python協(xié)程的實現(xiàn)方式小結(jié)

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

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

    Pandas讀寫CSV文件的方法示例

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

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

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

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

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

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

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

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

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

    Django視圖和URL配置詳解

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

    python爬蟲中PhantomJS加載頁面的實例方法

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

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

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

最新評論