91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么爬蟲網頁圖片

發布時間:2021-11-25 11:35:16 來源:億速云 閱讀:188 作者:iii 欄目:大數據

本篇內容介紹了“Python怎么爬蟲網頁圖片”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

回車桌面圖片爬取

今天我們就來爬爬這個網站

https://tu.enterdesk.com/

這個網站能爬的資源還是很多的,但我就寫一個例子,其他的可以根據思路去寫。

首先還是先來分析下這個網站的圖片獲取過程

Python怎么爬蟲網頁圖片

我選擇的是圖庫,先隨便選擇一個標簽,我這選寵物吧

Python怎么爬蟲網頁圖片

那么就訪問看看?隨便選取一個訪問看看是不是能出圖片 https://tu.enterdesk.com/chongwu/6.html

結果肯定是可以的啦

問題來了,現在怎么查看最后一頁的頁碼是什么?一種是無限循環下去 直到 沒有圖片標簽的時候報錯,還有一種就是從源碼中找出頁碼 那就得看有沒有頁碼按鈕 剛才滾輪比較快 現在慢一點 看有沒有頁碼這些東西

Python怎么爬蟲網頁圖片

Ctrl+U走一波 源代碼直接搜索

Python怎么爬蟲網頁圖片

選擇目標圖片看看是不是源地址 原圖 打開一看其實不是

import requests
all_urls = []  # 我們拼接好的每一頁鏈接

class Spider():
    # 構造函數,初始化數據使用
    def __init__(self, target_url, headers):
        self.target_url = target_url
        self.headers = headers

    # 獲取所有的想要抓取的URL
    def getUrls(self):
        #獲取末頁
        response = requests.get(target_url % 1,headers=headers).text
        html = BeautifulSoup(response,'html.parser')
        res = html.find(class_='wrap no_a').attrs['href']  #找到末頁的標簽提取末頁的鏈接
        page_num = int(re.findall('(\d+)',res)[0])  #正則匹配 頁碼數
        global all_urls
        # 循環得到拼接URL
        for i in range(1, page_num + 1):
            url = self.target_url % i
            all_urls.append(url)

現在再點擊進去圖片里面 發現是原圖了 這時再選擇圖片查看標簽的圖片鏈接

Python怎么爬蟲網頁圖片

對比下兩個鏈接

import requests
all_urls = []  # 我們拼接好的每一頁鏈接

class Spider():
    # 構造函數,初始化數據使用
    def __init__(self, target_url, headers):
        self.target_url = target_url
        self.headers = headers

    # 獲取所有的想要抓取的URL
    def getUrls(self):
        #獲取末頁
        response = requests.get(target_url % 1,headers=headers).text
        html = BeautifulSoup(response,'html.parser')
        res = html.find(class_='wrap no_a').attrs['href']  #找到末頁的標簽提取末頁的鏈接
        page_num = int(re.findall('(\d+)',res)[0])  #正則匹配 頁碼數
        global all_urls
        # 循環得到拼接URL
        for i in range(1, page_num + 1):
            url = self.target_url % i
            all_urls.append(url)

略縮圖 edpic_360_360 原圖 edpic_source

這下整體思路就有啦,我們可以獲取略縮圖的鏈接將url進行重構,形成原圖鏈接,然后再批量下載就好啦!

開始擼代碼了!!!

第一個是 class Spider(): 我們聲明了一個類,然后我們使用 def __init__去聲明一個構造函數

import requests
all_urls = []  # 我們拼接好的每一頁鏈接

class Spider():
    # 構造函數,初始化數據使用
    def __init__(self, target_url, headers):
        self.target_url = target_url
        self.headers = headers

    # 獲取所有的想要抓取的URL
    def getUrls(self):
        #獲取末頁
        response = requests.get(target_url % 1,headers=headers).text
        html = BeautifulSoup(response,'html.parser')
        res = html.find(class_='wrap no_a').attrs['href']  #找到末頁的標簽提取末頁的鏈接
        page_num = int(re.findall('(\d+)',res)[0])  #正則匹配 頁碼數
        global all_urls
        # 循環得到拼接URL
        for i in range(1, page_num + 1):
            url = self.target_url % i
            all_urls.append(url)

分析怎么提取末頁鏈接如下圖:

這里我們采用多線程的方式爬取,引入下面幾個模塊

from bs4 import BeautifulSoup #解析html
import threading #多線程
import re #正則匹配
import time #時間

新增加一個全局的變量,而且是多線程操作,我們需要引入線程鎖,避免資源同時寫入出錯。

all_img_urls = []       #所有圖片鏈接
g_lock = threading.Lock()  #初始化一個鎖

聲明一個Producer的類,負責提取圖片鏈接,然后添加到 all_img_urls 這個全局變量中

class Producer(threading.Thread):

    def run(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
        }
        global all_urls
        while len(all_urls) > 0:
            g_lock.acquire()  # 在訪問all_urls的時候,需要使用鎖機制
            page_url = all_urls.pop(0)  # 通過pop方法移除第一個元素,并且返回該值
            g_lock.release()  # 使用完成之后及時把鎖給釋放,方便其他線程使用
            try:
                print("分析" + page_url)
                response = requests.get(page_url, headers=headers, timeout=3).text
                html = BeautifulSoup(response,'html.parser')
                pic_link = html.find_all(class_='egeli_pic_li')[:-1]
                global all_img_urls
                g_lock.acquire()  # 這里還有一個鎖
                for i in pic_link:
                    link = i.find('img')['src'].replace('edpic_360_360','edpic_source')
                    all_img_urls.append(link)
                g_lock.release()  # 釋放鎖
                # time.sleep(0.1)
            except:
                pass

線程鎖,在上面的代碼中,當我們操作all_urls.pop(0)的時候,我們是不希望其他線程對它進行同時操作的,否則會出現意外,所以我們使用g_lock.acquire()鎖定資源,然后使用完成之后,記住一定要立馬釋放g_lock.release(),否則這個資源就一直被占用著,程序無法進行下去了。

if __name__ == "__main__":

    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
    }

    target_url = 'https://tu.enterdesk.com/chongwu/%d.html'  # 圖片集和列表規則

    print('開始獲取所有圖片頁鏈接!!!')
    spider = Spider(target_url, headers)
    spider.getUrls()
    print('完成獲取所有圖片頁,開始分析圖片鏈接!!!')

    threads = []
    for x in range(10):
        gain_link = Producer()
        gain_link.start()
        threads.append(gain_link)

    # join 線程同步 主線程任務結束之后 進入阻塞狀態 等待其他的子線程執行結束之后 主線程在終止
    for tt in threads:
        tt.join()

下面再定義一個DownPic類 用于下載圖片

class DownPic(threading.Thread):
    
    def run(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
        }
        while True:
            global all_img_urls
            # 上鎖
            g_lock.acquire()
            if len(all_img_urls) == 0:  # 如果沒有圖片了,就解鎖
                # 不管什么情況,都要釋放鎖
                g_lock.release()
                break
            else:
                t = time.time()
                down_time = str(round(t * 1000))  # 毫秒級時間戳
                pic_name = 'D:\\test\\'+ down_time + '.jpg'
                pic = all_img_urls.pop(0)
                g_lock.release()
                response = requests.get(pic, headers=headers)
                with open(pic_name, 'wb') as f:
                    f.write(response.content)
                    f.close()
                print(pic_name + '   已下載完成!!!')

可以看到利用了down_time = str(round(t * 1000)) 來生成毫秒級時間戳來命名圖片 其實也可以獲取圖片的名稱來命名 那就靠自己去寫一個了

再從if __name__ == "__main__": 添加下面代碼 用于開啟多線程下載

 print('分析圖片鏈接完成,開始多線程下載!!!')
    for x in range(20):
        download = DownPic()
        download.start()

整體流程就這么寫完啦!run下代碼

Python怎么爬蟲網頁圖片

Tips:跑這個代碼需要在D盤創建test文件夾 或者自己修改代碼實現其他功能

附出完整代碼:

import requests
from bs4 import BeautifulSoup #解析html
import threading #多線程
import re #正則匹配
import time #時間


all_urls = []  # 我們拼接好的每一頁鏈接
all_img_urls = []       #所有圖片鏈接
g_lock = threading.Lock()  #初始化一個鎖

class Spider():
    # 構造函數,初始化數據使用
    def __init__(self, target_url, headers):
        self.target_url = target_url
        self.headers = headers

    # 獲取所有的想要抓取的URL
    def getUrls(self):
        #獲取末頁
        response = requests.get(target_url % 1,headers=headers).text
        html = BeautifulSoup(response,'html.parser')
        res = html.find(class_='wrap no_a').attrs['href']  #找到末頁的標簽提取末頁的鏈接
        page_num = int(re.findall('(\d+)',res)[0])  #正則匹配 頁碼數
        global all_urls
        # 循環得到拼接URL
        for i in range(1, page_num + 1):
            url = self.target_url % i
            all_urls.append(url)


#負責提取圖片鏈接
class Producer(threading.Thread):

    def run(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'
        }
        global all_urls
        while len(all_urls) > 0:
            g_lock.acquire()  # 在訪問all_urls的時候,需要使用鎖機制
            page_url = all_urls.pop(0)  # 通過pop方法移除第一個元素,并且返回該值
            g_lock.release()  # 使用完成之后及時把鎖給釋放,方便其他線程使用
            try:
                print("分析">

“Python怎么爬蟲網頁圖片”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

图木舒克市| 油尖旺区| 靖安县| 大冶市| 连州市| 手游| 若尔盖县| 海口市| 溧阳市| 达尔| 龙口市| 井冈山市| 顺义区| 腾冲县| 东山县| 洛浦县| 界首市| 甘谷县| 江孜县| 清新县| 新乐市| 济南市| 浙江省| 潮安县| 湘潭县| 安远县| 资溪县| 青铜峡市| 晋江市| 汉中市| 凌源市| 山东省| 开鲁县| 淮南市| 菏泽市| 金堂县| 罗江县| 封开县| 邯郸县| 平山县| 永定县|