二十九 Python分佈式爬蟲打造搜索引擎Scrapy精講—selenium模塊是一個python操做瀏覽器軟件的一個模塊,能夠實現js動態網頁請求

selenium模塊css

selenium模塊爲第三方模塊須要安裝,selenium模塊是一個操做各類瀏覽器對應軟件的api接口模塊html

selenium模塊是一個操做各類瀏覽器對應軟件的api接口模塊,因此還得須要下載對應瀏覽器的操做軟件python

操做原理是:selenium模塊操做瀏覽器操做軟件,瀏覽器操做軟件操做瀏覽器git

Selenium 2.0適用於如下瀏覽器
  Google Chrome
  Internet Explorer 7, 8, 9, 10, 11
  Firefox
  Safari
  Opera
  HtmlUnit
  phantomjs
  Android
  iOSgithub

 

 

Selenium 的核心,就是用js控制瀏覽器web

下載對應瀏覽器的瀏覽器操做軟件chrome

 

Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/api

 

咱們這裏以火狐瀏覽器爲列瀏覽器

首先將火狐瀏覽器的操做軟件,geckodriver.exe文件放置到爬蟲目錄裏多線程

selenium模塊能夠模擬用戶行爲操做各類版本瀏覽器

webdriver.Firefox('操做瀏覽器軟件路徑')實例化火狐瀏覽器對象
get('url')訪問網站
find_element_by_xpath('xpath表達式')經過xpath表達式找對應元素
clear()清空輸入框裏的內容
send_keys('內容')將內容寫入輸入框
click()點擊事件
get_screenshot_as_file('截圖保存路徑名稱')將網頁截圖,保存到此目錄
page_source獲取網頁htnl源碼
browser.close() 關閉瀏覽器

 

複製代碼
#!/usr/bin/env python
# -*- coding:utf8 -*-
from selenium import webdriver  # 導入selenium模塊來操做瀏覽器軟件
import time

browser = webdriver.Firefox(executable_path='H:/py/16/adc/adc/Firefox/geckodriver.exe')
browser.get('https://www.tmall.com/?spm=a220o.1000855.a2226mz.1.5c90c3484bZCx6')

# 模擬用戶操做
browser.find_element_by_xpath('//input[@id="mq"]').clear()                 # 經過xpath表達式找到輸入框,clear()清空輸入框裏的內容
browser.find_element_by_xpath('//input[@id="mq"]').send_keys('連衣裙')     # 經過xpath表達式找到輸入框,send_keys()將內容寫入輸入框
browser.find_element_by_xpath('//button[@type="submit"]').click()          # 經過xpath表達式找到搜索按鈕,click()點擊事件

time.sleep(3)   # 等待3秒
browser.get_screenshot_as_file('H:/py/17/img/123.jpg')  # 將網頁截圖,保存到此目錄

neir = browser.page_source   # 獲取網頁內容
print(neir)

browser.close()     # 關閉瀏覽器
複製代碼

 

 

利用scrapy的Selector方法。來過濾帥選數據

Selector()方法,過濾帥選數據,參數是獲得的字符串html源碼

複製代碼
#!/usr/bin/env python
# -*- coding:utf8 -*-
from selenium import webdriver  # 導入selenium模塊來操做瀏覽器軟件
import time
from scrapy.selector import Selector

browser = webdriver.Firefox(executable_path='H:/py/16/adc/adc/Firefox/geckodriver.exe')
browser.get('https://www.tmall.com/?spm=a220o.1000855.a2226mz.1.5c90c3484bZCx6')

# 模擬用戶操做
browser.find_element_by_xpath('//input[@id="mq"]').clear()                 # 經過xpath表達式找到輸入框,clear()清空輸入框裏的內容
browser.find_element_by_xpath('//input[@id="mq"]').send_keys('連衣裙')     # 經過xpath表達式找到輸入框,send_keys()將內容寫入輸入框
browser.find_element_by_xpath('//button[@type="submit"]').click()          # 經過xpath表達式找到搜索按鈕,click()點擊事件

time.sleep(3)   # 等待3秒
browser.get_screenshot_as_file('H:/py/17/img/123.jpg')  # 將網頁截圖,保存到此目錄

neir = browser.page_source   # 獲取網頁內容
# print(neir)
gl_neir = Selector(text=neir)
dedao = gl_neir.css('title::text').extract()
print(dedao)

browser.close()     # 關閉瀏覽器
複製代碼

 

 

selenium操做瀏覽器滾動滾動條

execute_script(js)方法,執行原生態js腳本

複製代碼
#!/usr/bin/env python
# -*- coding:utf8 -*-
from selenium import webdriver  # 導入selenium模塊來操做瀏覽器軟件
import time
from scrapy.selector import Selector

browser = webdriver.Firefox(executable_path='H:/py/16/adc/adc/Firefox/geckodriver.exe')
browser.get('https://www.oschina.net/blog')


time.sleep(3)       # 等待3秒
for i in range(3):  # 滾動3次滾動條
    js = 'window.scrollTo(0,document.body.scrollHeight); var lenofpage=document.body.scrollHeight; return lenofpage'
    browser.execute_script(js)  # 執行js語言滾動滾動條
    time.sleep(3)

neir = browser.page_source   # 獲取網頁內容
# print(neir)
gl_neir = Selector(text=neir)
dedao = gl_neir.css('title::text').extract()
print(dedao)

# browser.close()     # 關閉瀏覽器
複製代碼

 

 

設置請求網頁不加載圖片,提升請求效率
ChromeOptions()方法,建立谷歌瀏覽器設置對象
Chrome()方法,建立谷歌瀏覽器對象

下面以谷歌瀏覽器爲列

複製代碼
#!/usr/bin/env python
# -*- coding:utf8 -*-
from selenium import webdriver  # 導入selenium模塊來操做瀏覽器軟件
from scrapy.selector import Selector

#設置請求網頁不加載圖片,提升請求效率
chrome_options = webdriver.ChromeOptions()                          #建立谷歌瀏覽器設置對象
prefs = {"profile.managed_default_content_settings.images": 2}      #設置谷歌瀏覽器不加載圖片
chrome_options.add_experimental_option('prefs', prefs)              #將不加載圖片添加到瀏覽器

browser = webdriver.Chrome(executable_path='H:/py/16/adc/adc/Firefox/chromedriver.exe', chrome_options=chrome_options)
# browser.set_page_load_timeout(40) #設置頁面最長加載時間爲40s
browser.get('https://www.taobao.com/')


neir = browser.page_source   # 獲取網頁內容
# print(neir)
gl_neir = Selector(text=neir)
dedao = gl_neir.css('title::text').extract()
print(dedao)

# browser.close()     # 關閉瀏覽器
複製代碼

 

selenium模塊還能夠操做PhantomJS瀏覽器,PhantomJS是一個無界面瀏覽器,比較清爽,可是多線程是性能會降低

 

重點:咱們推薦使用chromedriver.exe,谷歌瀏覽器

相關文章
相關標籤/搜索