突發奇想,爬取p站圖片做個壁紙圖庫(bukemiaoshu),當然這裡有許多的門檻,但是為了實現理想,暫時沒想那麼多了,直接開乾(不是專業做測試和自動化的,如有大佬請評論指教!!!) 1.進入登錄頁由於p站是需要登錄的,聽說p站反爬,requests應該不是那麼好使,於是使用selenium模擬人工 ...
突發奇想,爬取p站圖片做個壁紙圖庫(bukemiaoshu),當然這裡有許多的門檻,但是為了實現理想,暫時沒想那麼多了,直接開乾
(不是專業做測試和自動化的,如有大佬請評論指教!!!)
1.進入登錄頁
由於p站是需要登錄的,聽說p站反爬,requests應該不是那麼好使,於是使用selenium模擬人工登錄
觀察p站起始頁,首先是有個登錄的a標簽在這裡的,可以使用類選擇器來確定這個元素,再click一下即可
2.輸入賬戶密碼
觀察頁面
同樣可以使用類選擇器確定兩個元素
確定後使用send_keys(key)方法可以將key填入input標簽,填入後再單擊一下登錄即可
# 模擬登錄
purl = "https://www.pixiv.net/"
browser = webdriver.Chrome()
browser.get(purl)
login1 = browser.find_element_by_class_name("signup-form__submit--login")
login1.click()
user = 'xxxxxx'
passwd = 'xxxxxx'
user_class = browser.find_element_by_class_name("degQSE")
passwd_class = browser.find_element_by_class_name("hfoSmp")
login2 = browser.find_element_by_class_name("jvCTkj")
user_class.send_keys(user)
passwd_class.send_keys(passwd)
login2.click()
3.搜索
進入主頁後,觀察頁面搜索框,可以直接使用標簽選擇器搜索input標簽,整個頁面有3個input標簽,而選擇器會選擇第一個標簽,恰好搜索框就是第一個標簽
再定義一個key用來在終端中輸入爬取關鍵字,輸入後同樣可以用send_keys(key)方法填充,再模擬一下鍵盤,模擬鍵盤需要導入Keys
from selenium.webdriver.common.keys import Keys
導入Keys之後,可以使用sned_keys(Keys.ENTER)模擬鍵盤的回車,來確認搜索
# 模擬搜索
time.sleep(10)
search = browser.find_element_by_tag_name("input")
# browser.find_element_by_partial_link_text("搜索作品")
key = "歸終"
key = input('請輸入爬取關鍵字:')
search.send_keys(key)
search.send_keys(Keys.ENTER)
4.模擬下載
這裡就是我遇到的門檻了...
因為selenium不方便下載,就想利用requests和with open下載
結果發現p站的鏈接只有通過滑鼠訪問才可以被接受,而直接在瀏覽器敲圖片地址的方式是403被拒絕的
(這是什麼鬼反爬,這樣requests也get不到圖片了)
新的思路是:
在搜索框搜索完之後會有一個ul列表,裡面每個li都是圖片,可以使用複數類選擇器find_elements_by_class_name
利用迴圈對選擇器找到的類進行點擊,點擊之後進入圖片介紹頁,再次點擊圖片則會進入圖片大圖,模擬滑鼠右鍵,再進行另存為即可
但是同樣的十分麻煩
因為p站圖片不能用快捷鍵保存,只能用滑鼠,而滑鼠模擬右鍵又需要其他的庫
就算用了模擬滑鼠的庫,也要進行坐標級的調整,比如滑鼠右鍵後要移動到什麼位置單擊等等
十分的麻煩
這裡我就放棄了,希望哪次再心血來潮的時候(並且技術力足夠)繼續完善它(好家伙,被p站教做人了)
這裡只提供了一個簡單的打開圖片大圖的操作代碼
photo_class = browser.find_element_by_class_name("cYUezH")
photo_class.click()
time.sleep(5)
photo = browser.find_element_by_class_name("eAvtpu")
photo.click()