通過requests、BeautifulSoup下載四虎網站上的所有美女圖片
本博客只在技術層面進行研究,與其他原因無關。希望不要引起各位看客遐想。
四虎網站是一個成人網站,裡面有很多的資源可以進行下載,本文將把網站的圖片給下載下來。
一、獲取圖片網頁的信息
首先是獲取圖片網頁的鏈接 ,我們在圖片的主頁面上有各個圖片的鏈接和標題,我們可以爬取下載再進行分析
我們首先通過requests.get()的方法把網頁給爬取下來,這時利用requests.get()的content屬性可以把網頁的源代碼給顯示出來,也可以用text來顯示,但content的一個優勢就是返回的是二進位數據,而text返回的是unicode型數據。簡單來說,就是content不容易亂碼,而且也可以獲取圖片和文件。
html=requests.get(firsturl) #soup=BeautifulSoup(html.text) soup = BeautifulSoup(html.content) try : topurl = soup.find(attrs={class: next pagegbk})["href"] except TypeError: return 0
我們發現網頁的最後一頁的下一頁沒有,返回的是一個空值,所以我們直接將最後一個網頁作為頁面的異常值拋出.接下來我們直接利用BeautifulSoup類型的find_all找出所有的鏈接。其中有些鏈接不是圖片頁面的鏈接,我們又發現圖片鏈接的地址長度都是一樣的,我們可以通過將鏈接地址大小進行判斷,取得圖片地址鏈接。
for link in soup.find_all(a): href=link.get(href) l=os.path.join("https://www.1102f.com/",href[1:]) #title=link.get_text().encode("utf-8") title = link.get_text() print title if len(href) == 19: print keep(href,title)
我們還有一個任務就是取得下一頁的鏈接地址。
topurl = soup.find(attrs={class: next pagegbk})["href"]
二、獲取各個圖片的鏈接
我們現在可以通過上面取得網頁的地址來獲取各個圖片的鏈接,我們發現圖片的地址都是在img的src屬性里,我們可以通過上面的方法來獲得圖片的鏈接
def single(url,title): time.sleep(2) html=requests.get(url) soup=BeautifulSoup(html.text) for link in soup.find_all(img): print link.get(「src」)
三、下載圖片
圖片可以通過urllib.urlretrieve(imgurl, path)來保存圖片,但通過這種的方式保存的圖片無法打開,所以還是要通過
f.write(h.content)的方式來保存圖片。
還有將同一個標題下的圖片存在一起,我們通過判斷標題是否一樣,如果一樣就保存在這個文件夾下,
如果不一樣就創建文件夾
path=os.path.join(r"C:Usersasus-pcDesktopeautifulgirl555",title) if not os.path.exists(path): os.mkdir(path)
還有一點就是保存的圖片文件名,我們通過時間的名字來保存
name=str(time.time())[-7:-3]
四、主函數
我們利用下一頁返回是否為空來判斷是否爬取完成。如果返回的不是空,則會永遠執行,我們還有一個計時功能,來計算執行時間。
if __name__ == "__main__": print "anction time :" print time.strftime("%Y-%m-%d %H:%M:%S") url = r"https://www.1102f.com/Html/63/" topurl = frist(url) while 1: time.sleep(3) if topurl!=0: topurl=frist(topurl) else: print "end time:" print time.strftime("%Y-%m-%d %H:%M:%S")
具體的代碼我已上傳到我的GitHub上,鏈接地址如下:
CharlesAlison/sihuspider推薦閱讀:
※一個Python小白5個小時爬蟲經歷
※大神教你如果學習Python爬蟲 如何才能高效地爬取海量數據
※解讀爬蟲中HTTP的秘密(高階篇)
※關於在Python中安裝Scrapy 框架遇到的問題的解決方案
※請求、響應和反爬蟲