前兩天看到 某個程式猿寫了個爬蟲,然後公司200多人被端, 作為在入門python 的小白, 產生了興趣,於是乎學習了下,寫了一個小爬蟲,做一些入門的抓爬,爬點美女圖片吧 ! let's do it 看一眼美女,寫代碼的興緻就上來了 爬蟲是通過找到要爬的圖片的url 然後進行下載, 這個url怎麼找 ...
前兩天看到 某個程式猿寫了個爬蟲,然後公司200多人被端, 作為在入門python 的小白, 產生了興趣,於是乎學習了下,寫了一個小爬蟲,做一些入門的抓爬,爬點美女圖片吧 !
let's do it
看一眼美女,寫代碼的興緻就上來了
爬蟲是通過找到要爬的圖片的url 然後進行下載, 這個url怎麼找呢?
寫過網頁的應該都知道, 但是我沒寫過,我們打開網頁後按F12彈出調試工具
選擇network,在左側選擇一個有Request Headers 的
然後可以看到有 Referer, 字面意思是引用, 在此處是用來防止跨域請求,(我的理解是只能通過該網頁,來獲取左側選擇的文件 也就是這個頁面上的元素),一會我們的請求頭要用到
User-Agent: 用戶代理,裡面發現有Chrome這個單詞,猜測是瀏覽器,於是換個火狐試了下 裡面有Firefox, 這應該是瀏覽器代理 每個瀏覽器不同,我們用這個來偽裝成瀏覽器訪問
headers = { 'Referer':'https://www.85814.com/meinv/gaotiaomeinv/', 'User-Agent':'ozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36' }
我們把它放到一個字典中,因為後面類型要求是字典
接著用Request庫連接下網站
import requests headers = { 'Referer':'https://www.85814.com/meinv/gaotiaomeinv/', 'User-Agent':'ozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36' } url = 'https://www.85814.com/meinv/gaotiaomeinv/' resp = requests.get(url,headers=headers) pass
可以看到 Response 為 200 表示連接上了
很好
下一步我們就要獲取圖片的url了, 點擊開發工具左上角的元素審查,然後點擊一張圖
可以看到,img 的alt屬性對於圖的標題, src就是圖片的源地址,可以複製出來,在進入這個網站試試。
多試幾個圖片的話,知道 中間的大圖數據組織方式是一樣的, 我們可以通過一個路徑匹配來查找所有的src
Ctrl+F
下麵是一個匹配模式,.//p[@id="l"] .//p會匹配當前頁面下 所有p標簽 這裡用屬性id ="i"限制, 找到主框, 然後雙斜杠 在p[@id="l"] 下麵匹配所有的img。 後面/@src 是獲得所有的src 也就是url
上代碼
from lxml import etree html = etree.HTML(resp.text) srcs = html.xpath('.//p[@id="l"]//img/@src')
得到的srcs是一個 list 只要遍歷這個list 對每一個url 的圖片進行download
for src in srcs: time.sleep(0.2) filename= src.split('/')[-1] img = requests.get(src, headers=headers,timeout=10,verify=False) with open( 'imgs/'+ filename,'wb') as file: file.write(img.content)
用到了time,用來延遲,防止請求過快被伺服器認作受到攻擊,之前本人就被一個網站封ip了, 還有很多其他方法, 比如 每次用不同的 User-Agent偽裝成不同的瀏覽器, 還有用代理ip, 之後會提到。
然後在當前目錄創建imgs路徑, img.context是圖片的內容。
存的是bytes 所以用'wb' 打開。
運行程式 在img下就有很多美女圖片了
一個簡單的爬蟲就完成了。
學習尚淺,有錯誤或不當之處還請指正。