日韩性视频-久久久蜜桃-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电影 | 夜色在线视频 | 无码精品一区二区三区在线播放 | 91精品99| 欧美手机在线视频 | 日韩女优中文字幕 | 黄色片成年人 | 亚洲免费人成 | 国产青青青 | 久久av一区二区三区亚洲 | 欧美一区二 | 中国av在线播放 | 日韩欧美中文字幕一区 | 摸丰满大乳奶水www免费 | 日本男人的天堂 | 国产精品久久久久不卡 | 亚洲一区免费在线观看 | 免费在线成人 | 日韩激情视频在线观看 | 黄色免费版 | 深夜福利一区二区三区 | 国产精品一区二区三区四区视频 | 国产乱xxⅹxx国语对白 | 亚洲视频观看 | 国产精品电影一区 | 欧美经典一区二区三区 | 丁香花电影高清在线阅读免费 | 精品爱爱| 日韩综合一区 | 中文字幕第四页 | 丁香花免费高清完整在线播放 | jizz18国产| 亚洲熟女乱综合一区二区 | 东北毛片 | 国产精品久久久久久久免费 | 男人视频网 | www久久久久| 成人性生活免费看 | 我们的2018在线观看免费高清 | 蜜桃视频在线观看污 | 天堂在线一区 | 91视频最新| 91精品视频免费在线观看 | 美女隐私免费观看 | 日本视频在线免费观看 | 西西4444www大胆无码 | 美女伦理水蜜桃4 | 日本黄网免费 | 国产乱码精品一区二区三区忘忧草 | 欧美精品久久久久久久多人混战 | 天堂成人在线观看 | 国产观看| 999色综合| 欧美日韩三级在线观看 | 麻豆日韩 | 精品一区二区久久久久久久网站 | 三级特黄视频 | 国产精品99久久久久久人 | 国产成人精品一区二三区四区五区 | 97超碰在线免费观看 | 免费看av的网址 | 久草热视频 | 日韩aⅴ视频 | 懂色av一区二区三区在线播放 | 久久久久九九九九 | 日韩三级视频在线 | 亚洲伦理在线视频 | 亚洲aa视频| 奇米第四色首页 | 懂色av蜜臀av粉嫩av分享吧最新章节 | 婷婷六月天在线 | 日日夜夜国产精品 | 五月花成人网 | 午夜高潮| 撸大师av | 免费看黄色av | 男女在楼梯上高潮做啪啪 | 一个人在线观看www www.97色 | 亚洲美女福利视频 | 欧洲女性下面有没有毛发 | 天堂最新资源在线 | 久久久精品小视频 | www.操.com| 五月天综合在线 | 9i精品福利一区二区三区 | 看黄网站在线 | 国产人人看 | 激情综合激情五月 | 国产一级二级在线 | 91插插插插插 | av手机| 国产嫩草影院久久久 | 国产精品视频免费观看 | 成人亚洲电影 | 日韩黄色影院 | 日韩精品在线免费视频 | 中文字幕在线播放一区 | 亚洲人精品午夜射精日韩 | 国产一区二区精彩视频 |