第8章 scrapy進階開發(1)


8-1 selenium動態網頁請求與模擬登錄知乎

Ⅰ、介紹selenium

1.什么是selenium:selenium百度百科

2.selenium的構架圖:

如果要操作瀏覽器,還需要一個drive。

Ⅱ、安裝selenium

1.可以 pip install selenium。

2.找selenium的文檔(比較難找)。

如圖:

找到Drive,下載對應瀏覽器的drive,推薦用chrome(如果打不開就要VPN下載)

Ⅲ、使用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())

有時候取不到內容,看看是不是還沒有加載完,在中間sleeep幾秒就好了。

8-2 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的知識'''
12     browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;")
13     time.sleep(3)

8-3 chromedriver不加載圖片、phantomjs獲取動態網頁

chromedriver不加載圖片:

1 #設置chromedriver不加載圖片
2 #是固定的模版
3 chrome_opt = webdriver.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()

需要代碼匯總請移步我的github:https://github.com/pujinxiao/project_pjx/blob/master/s0vkaq/ArticleSpider/tools/selenium_spider.py

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

作者:今孝

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

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。


免責聲明!

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



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