【爬蟲】selenium動態頁面請求與模擬登錄知乎


一。安裝selenium             pip install selenium 

二。安裝相應瀏覽器的Driver(selenium 文檔)    http://selenium-python.readthedocs.io/api.html   推薦使用Chrome

三。selenium的使用

 1 # -*- coding: utf-8 -*-
 2 
 3 from selenium import webdriver
 4 from scrapy.selector import Selector  5 
 6 
 7 #知乎的模擬登錄
 8 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")  #路徑是chromedriver.exe的存放的位置
 9 browser.get("https://www.zhihu.com/#signin")
10 browser.find_element_by_css_selector(".view-signin input[name='account']").send_keys("********") #帳號
11 browser.find_element_by_css_selector(".view-signin input[name='password']").send_keys("********") #密碼
12 browser.find_element_by_id("captcha").send_keys(input('請輸入驗證碼:'))
13 browser.find_element_by_css_selector(".view-signin button.sign-button").click() #登錄
14 browser.quit()
15 
16 實例二:
17 #可以用selenium得到js加載后的html,比如這樣的話可以抓取到本來抓取的不到的一些字段(淘寶的交易量等等)
18 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")
19 browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025")
20 print(browser.page_source) #page_source就是js加載完的源代碼
21 #browser.quit()
22 '''
23 如果是用selenium本身的選擇器(python寫的,比較慢),會很慢
24 所以現在轉換成scrapy中的selector(他是用c語言寫的,很快)
25 模版,也可以嵌入scrapy中
26 '''
27 t_selector=Selector(text=browser.page_source) 28 print(t_selector.xpath('//*[@id="J_StrPriceModBox"]/dd/span/text()').extract())

有時會遇到取不到內容的情況,看看是不是還沒加載完畢,在中間sleep() 幾秒就好了。

 

四。selenium模擬登錄微博,模擬鼠標下拉

微博也有開放的API:http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5

 1 #selenium 完成微博模擬登錄
 2 browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")
 3 browser.get("http://weibo.com/")
 4 import time
 5 time.sleep(5)
 6 browser.find_element_by_css_selector("#loginname").send_keys("******")
 7 browser.find_element_by_css_selector(".info_list.password input[node-type='password']").send_keys("******")
 8 browser.find_element_by_css_selector(".info_list.login_btn a[node-type='submitBtn']").click()
 9 #下拉
10 for i in range(3):
11     '''三次下拉操作,這是javascript的知識     execute_script是用來執行js代碼的'''
12 browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;") 13 time.sleep(3)

五。chromedrive 不加載圖片,phantomjs獲取動態網頁

chromedriver不加載圖片:

1 #設置chromedriver不加載圖片
2 #是固定的模板
3 chrome_opt=wibdriver.ChromeOptions()
4 prefs={"profile.managed_default_content_settings.images":2}
5 chrome_opt.add_experimental_option("prefs",prefs)
6 browser=webdriver.Chrome(executable_path="E:/chromedriver.exe",chrome_options=chrome_opt)
7 browser.get("http://weibo.com")

六。phantomjs獲取動態網頁:

下載地址:http://phantomjs.org/download.html 如果不能下載,復制鏈接到迅雷下載

淘寶的詳情頁實例

1 #phantomjs, 無界面的瀏覽器, 多進程情況下phantomjs性能會下降很嚴重
2 browser = webdriver.PhantomJS(executable_path="F:/迅雷下載/phantomjs-2.1.1-windows/bin/phantomjs.exe")
3 browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025")
4 print (browser.page_source)
5 browser.quit()

關於selenium的我推薦蟲師的教程,還是很不錯的。「UI 測試自動化selenium」匯總

本人知識學習的總結者

出處:http://www.cnblogs.com/jinxiao-pu/p/6809583.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM