我想用Google圖片搜索下載批量圖片。用Python3颳去Google圖片(請求+ BeautifulSoup)
我的第一種方法;將頁面源文件下載到一個文件,然後用open()
打開它可以正常工作,但我希望能夠通過運行腳本和更改關鍵字來獲取圖像URL。
第一種方法:轉到圖像搜索(https://www.google.no/search?q=tower&client=opera&hs=UNl&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiM5fnf4_zKAhWIJJoKHYUdBg4Q_AUIBygB&biw=1920&bih=982)。在瀏覽器中查看頁面源並將其保存爲html文件。當我然後open()
與腳本的HTML文件,該腳本按預期工作,我得到了搜索頁上圖像的所有網址的整齊列表。這是腳本的第6行(取消註釋以測試)。
但是如果我使用requests.get()
函數來解析網頁,如圖腳本的7號線,它取一個不同 html文件,不包含圖像的完整URL,所以我不能提取他們。
請幫我提取正確的圖像網址。
編輯:鏈接到tower.html,我使用:https://www.dropbox.com/s/yy39w1oc8sjkp3u/tower.html?dl=0
這是代碼,我至今寫:
import requests
from bs4 import BeautifulSoup
# define the url to be scraped
url = 'https://www.google.no/search?q=tower&client=opera&hs=cTQ&source=lnms&tbm=isch&sa=X&ved=0ahUKEwig3LOx4PzKAhWGFywKHZyZAAgQ_AUIBygB&biw=1920&bih=982'
# top line is using the attached "tower.html" as source, bottom line is using the url. The html file contains the source of the above url.
#page = open('tower.html', 'r').read()
page = requests.get(url).text
# parse the text as html
soup = BeautifulSoup(page, 'html.parser')
# iterate on all "a" elements.
for raw_link in soup.find_all('a'):
link = raw_link.get('href')
# if the link is a string and contain "imgurl" (there are other links on the page, that are not interesting...
if type(link) == str and 'imgurl' in link:
# print the part of the link that is between "=" and "&" (which is the actual url of the image,
print(link.split('=')[1].split('&')[0])
我曾嘗試使用urllib的,這主要是給了我「禁止」回刮,這是我相信是因爲禁止,你提到。 urllib適用於除谷歌圖像以外的任何內容。 我知道在請求解析的文本中沒有「imgurl」-s。 你得到的結果是圖像的縮略圖。這比沒有好,但我想收穫全分辨率的圖像。 問題是解析從不包含那個。有沒有什麼辦法可以讓請求遵循腳本,並且實際上讓它獲取源圖像的地址? –
這就是爲什麼它給你「禁止」回來。他們已經構建了一個完整的模塊來解析網站的robots.txt文件,並確定是否允許抓取。您可以嘗試使用're'庫並使用正則表達式來查找值。但是,我認爲Google的搜索頁面很難找到......他們很難找到原因。 – ngoue
無論如何,感謝編輯提取縮略圖:) –