日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫实战:通过百度关键词爬取大量图片

發布時間:2024/9/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫实战:通过百度关键词爬取大量图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標地址: http://image.baidu.com/
輸入美女

分析網址
元網址見圖

粘貼過來卻如下
(在這里你會看到,明明在瀏覽器URL欄看到的是中文,但是復制url,粘貼到記事本或代碼里面,就會變成如下這樣???)

https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1610771025434_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E7%BE%8E%E5%A5%B3

在很多網站的URL中對一些get的參數或關鍵字進行編碼,所以我們復制出來的時候,會出現問題。

URL的編碼和解碼

import urllib from urllib import parse import urllib.requestdata = {'word': '美女'}# Python3的urlencode需要從parse中調用,可以看到urlencode()接受的是一個字典 print(urllib.parse.urlencode(data)) # 通過urllib.request.unquote()方法,把URL編碼字符串,轉換回原先字符串 print(urllib.request.unquote('word=%E7%BE%8E%E5%A5%B3'))

分析源代碼
F12或者頁面上右鍵審查元素。打開以后,定位到圖片的位置

復制下面這個網址
注意有轉義字符

imgurl="https:\/\/ss0.bdstatic.com\/70cFvHSh_Q1YnxGkpoWK1HF6hhy\/it\/u=2718853745,1288801299&fm=214&gp=0.jpg"

然后在當前網頁的空白地方右鍵:查看網頁源代碼
使用快捷鍵CTRl+F
查找(我這里 輸入 gp=0.jpg 通過輸入圖片網址最后幾個字符來定位圖片)

這個圖片怎么有很多地址,到底用哪個呢?可以看到有thumbURL,objURL等等。
通過分析可以知道,前面兩個是縮小的版本,hover是鼠標移動過后顯示的版本,objURL對應的那個地址,應該是我們需要的,不信可以打開這幾個網址看看,發現obj那個最大最清晰。

編寫正則表達式或者XPath表達式

pic_url = re.findall(’“objURL”:"(.*?)",,html,re.S)

objurl后面的,全匹配

找到本機電腦網絡的headers
有的時候,我們無法爬取一些網頁,會出現403錯誤,因為這些網頁為了防止別人惡意采集信息所以進行了一些反爬蟲的設置。
我們可以設置一些Headers信息,模擬成瀏覽器去訪問這些網站,就能解決這個問題。
首先,單擊網頁中的百度一下,即讓網頁發生一個動作,下方窗口出現了很多數據,如圖。

此時單擊圖中的www.baidu.com,出現如圖

在Headers,往下拖動,找到User-agent
這一串信息就是我們下面模擬瀏覽器用到的信息,復制出來。

所有代碼
語言python

from urllib.parse import quote import string import re from urllib import request import urllib.request word = input('關鍵詞:') url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip' url = quote(url, safe=string.printable)# # 解決ascii編碼報錯問題,不報錯則可以注釋掉 #模擬成瀏覽器 headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36") opener=urllib.request.build_opener() opener.addheaders=[headers] #將opener安裝為全局 urllib.request.install_opener(opener) #讀取網頁url_request=request.Request(url) url_response = request.urlopen(url_request,timeout=10) # 請求數據,可以和上一句合并.表示一次http訪問請求的時間最多10秒,一旦超過,本次請求中斷,但是不進入下一條,而是繼續重復請求這一條 html = url_response.read().decode('utf-8') # 加編碼,重要!轉換為字符串編碼,read()得到的是byte格式的。jpglist = re.findall('"thumbURL":"(.*?)",',html,re.S) #re.S將字符串作為整體,在整體中進行匹配。,thumbURL可以匹配其他格式的圖 print(len(jpglist)) n = 1 for each in jpglist:print(each)try:request.urlretrieve(each,'D:\\deeplearn\\xuexicaogao\\圖片\\%s.jpg' %n) #爬下載的圖片放置在提前建好的文件夾里except Exception as e:print(e)finally:print('下載完成。')n+=1if n==90:break print('結束')

代碼解析
爬蟲報錯UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 45-47: ordinal not…
原因 python 默認的編碼是ascii,當程序中出現非ascii編碼時,python的處理常常會報這樣的錯UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x?? in position 1: ordinal not in range(128),python沒辦法處理非ascii編碼的,此時需要自己設置將python的默認編碼,一般設置為utf8的編碼格式。
使用urllib.parse.quote進行轉換。

結果文件夾

代碼版本2
語言python

import urllib import urllib.request from urllib.parse import quote import re import osheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36","referer": "https://image.baidu.com" } print("****************************************************************************************") keyword = input("請輸入要下載的圖片:") last_dir = "C://Users//Shineion//Desktop//爬蟲圖" dir = "C://Users//Shineion//Desktop//爬蟲圖//" + keyword if os.path.exists(last_dir):if os.path.exists(dir):print("文件夾已經存在")else:os.mkdir(dir)print(dir + "已經創建成功") else:os.mkdir(last_dir)if os.path.exists(dir):print("文件夾已經存在")else:os.mkdir(dir)print(dir + "已經創建成功") keyword1 = quote(keyword, encoding="utf-8") url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + keyword1 + '&ct=201326592&v=flip' req = urllib.request.Request(url, headers=headers) f = urllib.request.urlopen(req).read().decode("utf-8") key = r'thumbURL":"(.+?)"' key1 = re.compile(key) num = 0 for string in re.findall(key1, f):print("正在下載" + string)f_req = urllib.request.Request(string, headers=headers)f_url = urllib.request.urlopen(f_req).read()fs = open(dir + "/" + keyword + str(num) + ".jpg", "wb+")fs.write(f_url)fs.close()num += 1print(string + "已下載成功") input("按任意鍵結束程序:")

注意問題:代碼容易卡住,在獲取某一圖片時卡住

作者:電氣-余登武

總結

以上是生活随笔為你收集整理的爬虫实战:通过百度关键词爬取大量图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本精品一区二区三区视频 | 色哟哟日韩精品 | 亚洲AV无码久久精品国产一区 | 欧美黑人激情 | 欧美性受xxx黑人xyx性爽 | 在线观看成年人视频 | 肉色超薄丝袜脚交一区二区图片 | 91一区二区三区在线 | 最新版天堂资源在线 | 国产激情av一区二区三区 | 91精品国产综合久久精品图片 | 亚洲 欧美 变态 另类 综合 | 欧美三日本三级少妇三 | 日本特黄成人 | 91视频在线网站 | 高清国产一区二区 | 日本在线三级 | jizz免费在线观看 | 久久综合伊人77777麻豆最新章节 | 91丝袜在线 | 特级西西444www高清大胆免费看 | 欧美成a | 啪网址 | 日韩在线视频二区 | 国产精品91一区二区 | 国产三级aaa | 亚洲剧情av | 日韩三级黄 | 久久国精品 | jizz性欧美2| 丁香花电影免费播放电影 | 欧美精品v国产精品v日韩精品 | 国产白嫩美女无套久久 | 人妻少妇精品无码专区久久 | 台湾佬美性中文娱乐 | 无毛av| 久久久国产打桩机 | 亚洲国产精品久久久久爰性色 | 国产在线视频福利 | 日韩一区在线观看视频 | 精品国产免费无码久久久 | 永久免费无码av网站在线观看 | 91国语对白 | 99视频在线免费观看 | 亚洲福利视频网站 | 大吊av| 瑟瑟视频在线 | 交专区videossex非洲 | 日韩欧美精品 | 永久免费看黄网站 | 懂色av一区二区在线播放 | 国产情侣av在线 | 国产在线观看黄 | 青娱乐极品在线 | 日本黄色天堂 | 欧美在线视频你懂的 | 欧美性俱乐部 | 看片一区二区 | 免费观看黄色网页 | 97在线观看免费高清 | 9999免费视频 | 人妻丝袜一区 | chinese hd av| 3d成人动漫在线观看 | 中文字幕日韩一区 | 综合网视频 | 白丝美女喷水 | 国产视频久久久 | 国产91av视频 | 天天射综合| 成人国产精品免费 | 未满十八岁勿进 | 手机成人在线视频 | 在线成人一区 | av激情四射| 国产成人传媒 | 国产精品欧美一区喷水 | 成年人av网站 | 国产精品一二三区视频 | 97成网| 国产综合久久久久久鬼色 | 99久久久无码国产精品6 | 亚洲国产成人一区二区精品区 | 亚洲尤物在线 | 日韩网站免费观看高清 | 日韩综合一区二区三区 | 一级黄色片在线看 | 成人免费看片98 | 国产成人aⅴ | 久久成人免费电影 | 黄色大片免费观看 | 国产福利片在线 | 伊人激情在线 | 99在线免费观看视频 | 久久久久久久久免费看无码 | 欧美日韩在线免费观看 | 俄罗斯黄色大片 | 日韩精品激情 | 乱老熟女一区二区三区 |