亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

基于Python下載網(wǎng)絡圖片方法匯總代碼實例

瀏覽:43日期:2022-07-19 15:28:25

本文介紹下載python下載網(wǎng)絡圖片的方法,包括通過圖片url直接下載、通過re/beautifulSoup解析html下載以及對動態(tài)網(wǎng)頁的處理等。

通過pic_url單個/批量下載

已知圖片url,例如http://xyz.com/series-*(1,2..N).jpg,共N張圖片,其鏈接形式較為固定,這樣經(jīng)簡單循環(huán),直接通過`f.write(requests.get(url).content)’即可以二進制形式將圖片寫入。

import osimport requestsdef download(file_path, picture_url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE',}r = requests.get(picture_url, headers=headers)with open(file_path, ’wb’) as f:f.write(r.content)def main():os.makedirs(’./pic/’, exist_ok=True) # 輸出目錄prefix_url = ’http://xyz.com/series-’ # 同一類目下的圖片url前綴n = 6 # 該類目下的圖片總數(shù)tmp = prefix_url.split(’/’)[-1]for i in range(1, n + 1):file_path = ’./pic/’ + tmp + str(i) + ’.jpg’picture_url = prefix_url + str(i) + ’.jpg’download(file_path, picture_url)if __name__ == ’__main__’:main()

正則re解析html獲取pic_url后下載

在實際操作中,圖片url按序排列情況較少,多數(shù)情況下用戶僅知道網(wǎng)頁url,需要對當前網(wǎng)頁htnl內(nèi)容進行解析,獲取源碼中包含的圖片url,常用方法有正則表達式匹配或BeautifulSoup等庫解析的方法。

正則re解析的思路是:首先通過 requests.get(url).text 獲得當前頁面html源碼;然后通過正則表達式匹配圖片url,如 re.compile(r’[a-zA-z]+://[^s]*.jpg’) 正則式一般會得到.jpg結尾的url,但其他網(wǎng)站圖片url可能會以.png或.webp等結尾,甚至需要其他的正則匹配,為此,讀者需要對正則表達式有所了解,強烈推薦 正則表達式30分鐘入門教程 ;將前一步得到的圖片url加入列表,進行下載。

import osimport reimport requestsdef get_html(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 ', } html = requests.get(url, headers=headers).text return htmldef parse_html(html_text): picre = re.compile(r’[a-zA-z]+://[^s]*.jpg’) # 本正則式得到.jpg結尾的url pic_list = re.findall(picre, html_text) return pic_listdef download(file_path, pic_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 ', } r = requests.get(pic_url, headers=headers) with open(file_path, ’wb’) as f: f.write(r.content)def main(): # 使用時修改url即可 url = ’http://xyz.com/series’ html_text = get_html(url) pic_list = parse_html(html_text) os.makedirs(’./pic/’, exist_ok=True) # 輸出目錄 for pic_url in pic_list: file_name = pic_url.split(’/’)[-1] file_path = ’./pic/’ + file_name download(file_path, pic_url)if __name__ == ’__main__’: main()

通過bs4獲取pic_url

與正則匹配思路類似,只不過通過Beautiful Soup解析html獲得圖片url列表,然后依次下載圖片。由于各網(wǎng)站html結構有差異,用戶需要自行進行適當修改。以下代碼是對豆瓣圖片的下載。

import osimport timeimport requestsfrom bs4 import BeautifulSoupdef get_html(url): headers = { ’user-agent’: ’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36’, } html = requests.get(url, headers=headers).text return htmldef parse_html(html_text): soup = BeautifulSoup(html_text, ’html.parser’) li = soup.find_all(’div’, attrs={’class’:’cover’}) pic_list = [] for link in li: pic_url = link.find(’img’).get(’src’) pic_url = pic_url.replace(’/m/’, ’/l/’) pic_list.append(pic_url) return pic_listdef download(file_path, pic_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 ', } r = requests.get(pic_url, headers=headers) with open(file_path, ’wb’) as f: f.write(r.content)def main(): ’從豆瓣下載石原里美圖片,觀察發(fā)現(xiàn)每頁包含30張圖片,其url按30遞增,如下所示’ pic_list = [] for i in range(10): url = ’https://movie.douban.com/celebrity/1016930/photos/?type=C&start=’ + str(30*i) + ’&sortby=like&size=a&subtype=a’ html_text = get_html(url) pic_list += parse_html(html_text) os.makedirs(’./pic/’, exist_ok=True) # 輸出目錄 for i, pic_url in enumerate(pic_list): if i%30 == 0: print(’正在下載第%s頁’%(i/30+1)) file_name = pic_url.split(’/’)[-1].split(’.’)[0] + ’.jpg’ file_path = ’./pic/’ + file_name download(file_path, pic_url)if __name__ == ’__main__’: main()

在下載圖片時,發(fā)現(xiàn)可以直接訪問圖片的縮略圖url進行下載,但由于豆瓣的反爬策略,直接訪問原圖url會被服務器拒絕,見下圖。解決方法見下一部分。

基于Python下載網(wǎng)絡圖片方法匯總代碼實例

可能遇到的問題

網(wǎng)站反爬蟲機制

User-Agent:模擬瀏覽器訪問,添加后,服務器會認為是瀏覽器正常的請求。一般與網(wǎng)頁操作相關訪問都予以添加。 Referer:瀏覽器以此來判斷你從哪一個網(wǎng)頁跳轉過來。例如在上述豆瓣圖片的下載示例中,直接輸入網(wǎng)址會被拒絕,但你在網(wǎng)站一步步點擊卻會在同一地址中得到內(nèi)容,這就是因為你在一步步訪問時是有一個前序跳轉地址的,這個地址可以通過“F12”在header中得到,如果找不到的話試一試根目錄地址“ movie.douban.com/”,或是前幾步的地址”… GitHub倉庫’adv_bs4_url.py‘文件 。 ip偽裝:構建ip池。 Cookie偽裝:cookie是服務器用來辨別你此時的狀態(tài)的,每一次向服務器請求cookie都會隨之更新。 常用正則式匹配

網(wǎng)頁的數(shù)據(jù)采用異步加載,如js渲染的頁面或ajax加載的數(shù)據(jù)通過get不到完整頁面源碼。

一種方案是常說的動態(tài)爬蟲,即采用一些第三方的工具,模擬瀏覽器的行為加載數(shù)據(jù),如Selenium、PhantomJs等。網(wǎng)絡上有較多介紹文章,有點麻煩就沒有自己寫了,后續(xù)有需求的話在做吧,不過其他方法已經(jīng)夠用了。

另外可以通過分析頁面,找到請求借口,加載頁面。其核心就是跟蹤頁面的交互行為 JS 觸發(fā)調(diào)度,分析出有價值、有意義的核心調(diào)用(一般都是通過 JS 發(fā)起一個 HTTP 請求),然后我們使用 Python 直接訪問逆向到的鏈接獲取價值數(shù)據(jù)。通過'F12”進行分析,例如對于花瓣網(wǎng),可以獲得其鏈接為' huaban.com/search/?q=石… request.urlopen(url).read() 讀取網(wǎng)頁。

基于Python下載網(wǎng)絡圖片方法匯總代碼實例

Pyautogui,鼠標模擬點擊的“傻瓜式”流程

本方法僅適用于重復性的工作,而且效率較低,但完全沒有被反爬蟲策略屏蔽的風險。其核心思想與word中的“宏”類似,就是你告訴計算機一次循環(huán)中鼠標分別如何操作,然后讓其自動循環(huán)。代碼簡單明了。

import pyautoguiimport timepyautogui.FAILSAFE = Truedef get_mouse_positon(): time.sleep(3) # 此間將鼠標移動到初始位置 x1, y1 = pyautogui.position() print(x1, y1) pyautogui.click(x=x1, y=y1, button=’right’) # 模擬鼠標右鍵點擊,呼出菜單 time.sleep(5) # 此間將鼠標移動到“save image as...”選項中央 x2, y2 = pyautogui.position() print(x2, y2) pyautogui.click(x=x2, y=y2) # 模擬鼠標左鍵點擊,點中“save image as...” time.sleep(10) # 此間彈出保存文件彈窗,自行選擇保存位置,并將鼠標移至“保存(S)”按鈕中央 x3, y3 = pyautogui.position() pyautogui.click(x=x3, y=y3) print(x3, y3)def click_download(N): for i in range(N): # 擬下載圖片數(shù)量 pyautogui.click(x=517, y=557, duration=0.25, button=’right’) # 呼出菜單,自行將x/y設置為x1/y1 time.sleep(1) pyautogui.click(x=664, y=773, duration=0.25) # 下載,x/y為x2/y2 time.sleep(1) pyautogui.click(x=745, y=559, duration=0.25) # 保存,x/y為x3/y3 time.sleep(1) pyautogui.click(x=517, y=557, duration=0.25) # 進入下一張圖片 time.sleep(2) # 取決于網(wǎng)絡加載速度,自行設置 if __name__ == '__main__': # get_mouse_positon() # 一開始只運行此命令,獲取屏幕坐標,后續(xù)注釋掉該句 click_download(10)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 男女男精品视频网站在线观看 | 99je全部都是精品视频在线 | 亚洲黄色在线视频 | 精品日韩欧美一区二区三区在线播放 | freese×video性欧美丝袜 | 久草网首页 | 在线观看国产精品入口 | 亚洲精品第一国产综合野 | 国产做国产爱免费视频 | 国产精品午夜性视频 | 手机看片在线播放 | 狠狠色噜狠狠狠狠色综合久 | 国产精品久久国产三级国电话系列 | 欧美性一区二区三区 | 亚洲精品一区二区三区中文字幕 | 亚洲精品一区二区三区不卡 | 成人免费网站久久久 | 国产精品一二三区 | 8050网午夜一级毛片免费不卡 | 日本久久久久一级毛片 | 色视频www在线播放国产人成 | a久久99精品久久久久久不 | 欧美一级做一a做片性视频 欧美一级做一级爱a做片性 | 精品综合久久久久久98 | 欧美高清视频手机在在线 | 精品国产高清不卡毛片 | 免费播放aa在线视频成人 | 亚洲精品美女国产一区 | 亚洲成在人 | 免费看日韩欧美一级毛片 | 成人午夜天| 欧美性aaa| 国产亚洲一区二区手机在线观看 | 免费观看日本特色做爰视频在线 | 99精品视频在线免费观看 | 国内精品久久久久久久aa护士 | 国产欧美一区二区三区免费 | 欧美成人性毛片免费版 | 欧美国产日本高清不卡 | 免费视频成人国产精品网站 | 韩日一级 |