寫在前面
很高興我這系列的文章寫道第18篇了,今天寫一個爬蟲愛好者特別喜歡的網站煎蛋網http://jandan.net/ooxx
,這個網站其實還是有點意思的,網站很多人寫了N多的教程了,各種方式的都有,當然網站本身在爬蟲愛好者的不斷進攻下,也在不斷的完善,反爬措施也很多,今天我用selenium
在揍他一波。
整體看上去,煎蛋網的妹子圖質量還是可以的,不是很多,但是還蠻有味道的,這可能也是爬蟲er,一批一批的奔赴上去的原因。
1. 網站分析
這個網站如果用 selenium
爬取,其實也沒什麼要分析的,模擬訪問就行,匯入必備的模組。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from lxml import etree
import requests
import time
我使用的是PhantomJS
去載入瀏覽器,關於這個PhantomJS
,去網際網路搜尋一下吧,資料大把,會看的很爽的,總之呢,它可以模擬一個真實的瀏覽器做任何事情,得到你想要的資料。
browser = webdriver.PhantomJS()
browser.set_window_size(1366, 768) # 這個地方需要設定一下瀏覽器的尺寸
wait = WebDriverWait(browser,10)
browser.get("http://jandan.net/ooxx")
2. 分析資料
程式獲取到資料之後就可以對資料進行處理了,編寫一個get_content函式,用來處理網頁原始碼。
def get_content():
try:
wait.until(
EC.presence_of_element_located((By.XPATH,`//*[@id="comments"]/ol`))
)
#
print("正在爬取{}".format(browser.current_url))
page_source = browser.page_source # 獲取網頁原始碼
html = etree.HTML(page_source) # 解析原始碼
imgs = html.xpath("//li[contains(@id,`comment`)]//img/@src") # 匹配圖片
download(imgs)
except Exception as e:
print("錯誤")
print(e)
finally:
browser.close()
圖片獲取到之後,在上面的程式碼中,注意有一個地方呼叫了一個 download
函式,這個函式就是用來下載圖片的
def download(imgs):
path = "./xxoo/{}" # 路徑我寫死了
for img in imgs:
try:
res = requests.get(img)
content = res.content
except Exception as e:
print(e)
continue
file_name = img.split("/")[-1] # 獲取檔名
with open(path.format(file_name),"wb") as f:
f.write(content)
print(file_name,"成功下載檔案")
time.sleep(0.3)
# 迴圈下載完畢,進行翻頁操作 previous-comment-page
next = wait.until(
EC.presence_of_element_located((By.XPATH, `//*[@id="comments"]//a[@class="previous-comment-page"]`))
)
next.click()
return get_content() # 繼續呼叫上面的網頁原始碼分析流程
OK,執行一下。