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

Python抓取網(wǎng)頁圖片難點(diǎn)分析

 更新時(shí)間:2023年01月11日 10:48:56   作者:SF引流  
沒想到python是如此強(qiáng)大,令人著迷,以前看見圖片總是一張一張復(fù)制粘貼,現(xiàn)在好了,學(xué)會python就可以用程序?qū)⒁粡垙垐D片,保存下來。今天網(wǎng)上沖浪看到很多美圖,可是圖片有點(diǎn)多,不想一張一張地復(fù)制粘貼,怎么辦呢?辦法總是有的,即便沒有我們也可以創(chuàng)造一個(gè)辦法

一、網(wǎng)頁圖片抓取時(shí)代背景

隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和互聯(lián)網(wǎng)的普及,由于網(wǎng)上用戶數(shù)量越來越龐大,網(wǎng)站同時(shí)并發(fā)的壓力比較大,尤其是大型網(wǎng)站,因此現(xiàn)在網(wǎng)頁圖片都采取懶加載(Lazy Load)的方式;還出現(xiàn)了好多為了采集資源而出現(xiàn)的網(wǎng)絡(luò)爬蟲(Net spider),為了反制圖片爬蟲,研發(fā)人員都不會把網(wǎng)頁的圖片地址放到<image>標(biāo)簽的src屬性中去,而放到其他屬性中去通過腳本來異步加載,或者頁面中根本沒有圖片地址,通過專門的異步請求來單獨(dú)獲取和處理,還有就是針對頻繁下載IP進(jìn)行封號。

二、網(wǎng)頁圖片抓取難點(diǎn)處理

1、圖片地址存放位置不同

采用以下網(wǎng)頁圖片抓取代碼,把存放到不同位置的圖片地址都抓取出來,:

            # 獲取圖片的真實(shí)地址
            if img_node_type==0:
                fileUrl=''
                # 優(yōu)先src之外的其他屬性,這些屬性一般存放真實(shí)地址,發(fā)爬都是這樣設(shè)計(jì)的
                for attrkey in img.attrs:
                    if attrkey=='src':
                        continue
                    tempurl = str(img.attrs[attrkey])
                    tempurl=get_imageurl_in_str(tempurl)
                    if tempurl=="": #當(dāng)前屬性值不含圖片url則繼續(xù)搜索其他屬性值
                        continue
                    if tempurl[:4]=="http":
                        fileUrl = tempurl
                    elif tempurl[:2]=="http://":
                        fileUrl = "http:"+tempurl
                    elif tempurl[:1] == "/":  # 當(dāng)前頁面地址作為路徑
                        fileUrl = get_root_by_pageurl(pageUrl) + tempurl
                    elif tempurl[:2] == "./":  # 當(dāng)前頁面地址作為路徑
                        fileUrl = get_root_by_pageurl(pageUrl) + tempurl[1:]
                    elif tempurl[:3] == "../":  # 當(dāng)前頁面地址作為路徑
                        fileUrl = get_root_by_pageurl(pageUrl) + tempurl[2:]
                    if fileUrl!='':
                        break
                # 如果在其他屬性未能找到圖片的真實(shí)地址,則再在src屬性尋找
                if fileUrl=='': #圖片地址為空則不下載
                    for attrkey in img.attrs:
                        if attrkey=='src':
                            tempurl = str(img.attrs[attrkey])
                            tempurl=get_imageurl_in_str(tempurl)
                            if tempurl=="": #當(dāng)前屬性值不含圖片url則繼續(xù)搜索其他屬性值
                                continue
                            if tempurl[:4]=="http":
                                fileUrl = tempurl
                            elif tempurl[:2]=="http://":
                                fileUrl = "http:"+tempurl
                            elif tempurl[:1] == "/":  # 當(dāng)前頁面地址作為路徑
                                fileUrl = get_root_by_pageurl(pageUrl) + tempurl
                            elif tempurl[:2] == "./":  # 當(dāng)前頁面地址作為路徑
                                fileUrl = get_root_by_pageurl(pageUrl) + tempurl[1:]
                            elif tempurl[:3] == "../":  # 當(dāng)前頁面地址作為路徑
                                fileUrl = get_root_by_pageurl(pageUrl) + tempurl[2:]
                            if fileUrl!='':
                                break

2、圖片地址格式解析處理

采用以下網(wǎng)頁圖片抓取代碼,可以從紛繁復(fù)雜的文本中把正確的圖片地址提取處理來:

        # 按照正則方式進(jìn)行匹配查找類似'http://*.jpg,https://*.jpg'
        list2_jpg = re.findall(r"http(.+?)\.jpg", pageUrl)
        list2_png = re.findall(r"http(.+?)\.png", pageUrl)
        list2 = []
        for m in range(len(list2_jpg)):
            while len(re.findall(r"http(.+?)\.jpg", list2_jpg[m] + ".jpg")) > 0:
                list2_jpg[m] = re.findall(r"http(.+?)\.jpg", list2_jpg[m] + ".jpg")[0]
            list2_jpg[m] = list2_jpg[m].replace("\\", "")  # 去掉轉(zhuǎn)義反斜杠
            list2_jpg[m] = unquote(unquote(list2_jpg[m]))  # 去掉Hex字符,類似%3A%2F%2F 應(yīng)為://
            list2.append("http" + list2_jpg[m] + ".jpg")
        for m in range(len(list2_png)):
            while len(re.findall(r"http(.+?)\.png", list2_png[m] + ".png")) > 0:
                list2_png[m] = re.findall(r"http(.+?)\.png", list2_png[m] + ".png")[0]
            list2_png[m] = list2_png[m].replace("\\", "")  # 去掉轉(zhuǎn)義反斜杠
            list2_png[m] = unquote(unquote(list2_png[m]))  # 去掉Hex字符,類似%3A%2F%2F 應(yīng)為://
            list2.append("http" + list2_png[m] + ".png")

3、防止IP被封可以采用代理Ip機(jī)制

采用以下網(wǎng)頁圖片抓取代碼,可以防止本機(jī)IP被封:

       try:
            # response=requests.request('GET', pageUrl, headers=headers, proxies=ProxyPool.get_Proxy_Str(poolName), verify=False)
            response=requests.request('GET', pageUrl, headers=headers, timeout=5) #, proxies=ProxyPool.get_Proxy_Str(poolName), verify=False)
        except Exception as e:
            my_logger_debug(logger,"local request page fail,page url:[%s] " % (pageUrl))
            try: # 反爬蟲:先使用本機(jī),不行再使用代理IP
                proxy_ip_mode = int(proxyiper.getValueByKey('mode'))
                if proxy_ip_mode == 0:  # 調(diào)用代理Ip API 不同用戶配置不同,按使用代理IP數(shù)量收費(fèi)
                    response=requests.request('GET', pageUrl, headers=headers, timeout=5, proxies=ProxyPool.get_Proxy_Str(poolName), verify=False)
                elif proxy_ip_mode == 1:  # 使用ADSL服務(wù)器動(dòng)態(tài)切換IP,按照租賃ADSL服務(wù)器收費(fèi)
                    switchIp(logger)
                    response = requests.request('GET', pageUrl, headers=headers,
                                                timeout=5)  # , proxies=ProxyPool.get_Proxy_Str(poolName), verify=False)
            except Exception as e:
                my_logger_debug(logger, e)
                my_logger_debug(logger,"proxy request page fail,page url:[%s]" % (pageUrl))
                return

三、網(wǎng)頁圖片抓取場景分類

基本現(xiàn)在的網(wǎng)頁圖片抓取場景可以分為2種:

場景1:原來從各大搜索引擎(例如百度、360、搜狐等)和知名圖片網(wǎng)站(昵圖網(wǎng)、匯圖網(wǎng)等),輸入圖片關(guān)鍵詞進(jìn)行搜索,然后一頁一頁翻看圖片搜索結(jié)果,現(xiàn)在想在下載工具上輸入圖片關(guān)鍵字,一鍵把圖片搜索結(jié)果下載到本地。

場景2:從指定的網(wǎng)站首頁或網(wǎng)站內(nèi)頁(包括單個(gè)頁面或多個(gè)頁面)上一鍵下載圖片到本地計(jì)算機(jī)上,如果要把某個(gè)網(wǎng)站所有頁面上的圖片都下載下來,可以先使用類似SiteMap X這種網(wǎng)站地圖掃描工具,然后再把地址文件導(dǎo)入圖片抓取工具來下載。Demo示例截圖如下:、

有相關(guān)經(jīng)驗(yàn)或碰到類似問題的同學(xué),可以后臺評論區(qū)留言大家一起交流討論。

到此這篇關(guān)于Python抓取網(wǎng)頁圖片難點(diǎn)分析的文章就介紹到這了,更多相關(guān)Python抓取網(wǎng)頁圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中關(guān)于字符串對象的一些基礎(chǔ)知識

    Python中關(guān)于字符串對象的一些基礎(chǔ)知識

    這篇文章主要介紹了詳解Python中的字符串對象,關(guān)于字符串的操作和特性是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-04-04
  • 詳解Python 最短匹配模式

    詳解Python 最短匹配模式

    這篇文章主要介紹了如何實(shí)現(xiàn)Python 最短匹配模式,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題

    解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題

    這篇文章主要介紹了解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python機(jī)器學(xué)習(xí)入門(一)序章

    Python機(jī)器學(xué)習(xí)入門(一)序章

    這篇文章主要介紹了Python機(jī)器學(xué)習(xí)入門知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 使用Python中的cookielib模擬登錄網(wǎng)站

    使用Python中的cookielib模擬登錄網(wǎng)站

    這篇文章主要介紹了使用Python中的cookielib模擬登錄網(wǎng)站,用作生成cookie然后登錄,需要的朋友可以參考下
    2015-04-04
  • python中使用.py配置文件的方法詳解

    python中使用.py配置文件的方法詳解

    這篇文章主要介紹了python中使用.py配置文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)

    Python3 多線程(連接池)操作MySQL插入數(shù)據(jù)

    本文將結(jié)合實(shí)例代碼,介紹Python3 多線程(連接池)操作MySQL插入數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python?matplotlib繪圖時(shí)使用鼠標(biāo)滾輪放大/縮小圖像

    Python?matplotlib繪圖時(shí)使用鼠標(biāo)滾輪放大/縮小圖像

    Matplotlib是Python程序員可用的事實(shí)上的繪圖庫,雖然它比交互式繪圖庫在圖形上更簡單,但它仍然可以一個(gè)強(qiáng)大的工具,下面這篇文章主要給大家介紹了關(guān)于Python?matplotlib繪圖時(shí)使用鼠標(biāo)滾輪放大/縮小圖像的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • python連接FTP服務(wù)器的實(shí)現(xiàn)方法

    python連接FTP服務(wù)器的實(shí)現(xiàn)方法

    本文主要介紹了python連接FTP服務(wù)器的實(shí)現(xiàn)方法,主要使用ftp操作進(jìn)行連接FTP服務(wù)器、獲取當(dāng)前目錄文件清單、上傳文件等操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-06-06
  • Python實(shí)現(xiàn)求取表格文件某個(gè)區(qū)域內(nèi)單元格的最大值

    Python實(shí)現(xiàn)求取表格文件某個(gè)區(qū)域內(nèi)單元格的最大值

    這篇文章主要介紹基于Python語言,基于Excel表格文件內(nèi)某一列的數(shù)據(jù),計(jì)算這一列數(shù)據(jù)在每一個(gè)指定數(shù)量的行的范圍內(nèi)(例如每一個(gè)4行的范圍內(nèi))的區(qū)間最大值的方法,需要的朋友可以參考下
    2023-08-08

最新評論

芜湖县| 象山县| 万山特区| 丹凤县| 衡阳市| 九龙城区| 资阳市| 江城| 景德镇市| 会宁县| 无锡市| 龙南县| 东源县| 秦安县| 治多县| 曲周县| 宜兰县| 安庆市| 集安市| 尚义县| 花莲市| 永德县| 沧源| 当雄县| 从江县| 潞西市| 秦安县| 灵山县| 张家港市| 梅河口市| 观塘区| 温宿县| 梁山县| 大石桥市| 沙田区| 商水县| 同江市| 永靖县| 星子县| 建水县| 鄱阳县|