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

一。安裝selenium             pip install selenium javascript

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

三。selenium的使用html

 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() 幾秒就行了。java

 

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

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

 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獲取動態網頁web

chromedriver不加載圖片:chrome

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獲取動態網頁:windows

下載地址:http://phantomjs.org/download.html 若是不能下載,複製連接到迅雷下載api

淘寶的詳情頁實例

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

相關文章
相關標籤/搜索