最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

本文來介紹如何多線程采集圖片,多線程效率更快,但是,我們單一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的第三方庫,相當(dāng)于css選擇器+xpath+re。

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

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

  • re

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

  • os

os 就是 “operating system” 的縮寫,顧名思義,os模塊提供的就是各種 Python 程序與操作系統(tǒng)進(jìn)行交互的接口。通過使用 os 模塊,一方面可以方便地與操作系統(tǒng)進(jìn)行交互,另一方面也可以極大增強(qiá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是有補(bǔ)充渠道的,會有新的代理ip不斷被加入池子中。
  • 池子中的代理ip是可以被隨機(jī)取出的。

這樣,代理池中始終有多個不斷更換的、有效的代理ip,且我們可以隨機(jī)從池子中取出代理ip,然后讓爬蟲程序使用代理ip訪問目標(biāo)網(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)址。

批量采集

接下來,我們就進(jìn)入到我們的正式學(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,提升了很快,當(dāng)我們的圖片很多的時候,我們多線程的優(yōu)勢越來越明顯。

總結(jié)

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

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

相關(guān)文章

  • Flask模板引擎之Jinja2語法介紹

    Flask模板引擎之Jinja2語法介紹

    這篇文章主要介紹了Flask模板引擎之Jinja2語法介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解Python如何獲取和理用戶的連續(xù)輸入

    詳解Python如何獲取和理用戶的連續(xù)輸入

    這篇文章主要為大家詳細(xì)介紹了如何在?Python?中獲取和處理用戶的連續(xù)輸入,包括基本的輸入方法、輸入驗證、異常處理以及一些常見的應(yīng)用場景,感興趣的可以了解下
    2024-03-03
  • 使用python打印十行楊輝三角過程詳解

    使用python打印十行楊輝三角過程詳解

    這篇文章主要介紹了使用python打印十行楊輝三角過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • python爬取百度貼吧前1000頁內(nèi)容(requests庫面向?qū)ο笏枷雽崿F(xiàn))

    python爬取百度貼吧前1000頁內(nèi)容(requests庫面向?qū)ο笏枷雽崿F(xiàn))

    這篇文章主要介紹了python爬取百度貼吧前1000頁內(nèi)容(requests庫面向?qū)ο笏枷雽崿F(xiàn)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python實現(xiàn)班級檔案管理系統(tǒng)

    python實現(xiàn)班級檔案管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)班級檔案管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • pandas中的ExcelWriter和ExcelFile的實現(xiàn)方法

    pandas中的ExcelWriter和ExcelFile的實現(xiàn)方法

    這篇文章主要介紹了pandas中的ExcelWriter和ExcelFile的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 將Python腳本通過Wooey轉(zhuǎn)化為Web應(yīng)用的簡易解決方案

    將Python腳本通過Wooey轉(zhuǎn)化為Web應(yīng)用的簡易解決方案

    Wooey 是一個開源的 Python 項目,旨在幫助開發(fā)者快速將 Python 腳本轉(zhuǎn)化為用戶友好的 Web 應(yīng)用程序,在本文中,我們將詳細(xì)介紹 Wooey 的功能、安裝與配置方法,并展示如何將一個 Python 腳本通過 Wooey 轉(zhuǎn)化為 Web 應(yīng)用,需要的朋友可以參考下
    2025-05-05
  • python 雙循環(huán)遍歷list 變量判斷代碼

    python 雙循環(huán)遍歷list 變量判斷代碼

    這篇文章主要介紹了python 雙循環(huán)遍歷list 變量判斷代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 最新評論

    休宁县| 密云县| 龙口市| 和政县| 九龙县| 桐庐县| 阳泉市| 兴海县| 左贡县| 阿坝县| 德江县| 辽阳市| 卢氏县| 崇明县| 彝良县| 秦皇岛市| 永州市| 武强县| 河间市| 泽普县| 岳阳市| 南华县| 奇台县| 丘北县| 九龙坡区| 扎鲁特旗| 南通市| 邵武市| 类乌齐县| 胶南市| 仁布县| 郓城县| 双峰县| 佛冈县| 九台市| 柯坪县| 鄂托克旗| 太仆寺旗| 澄城县| 瑞昌市| 交城县|