目錄
- 使用背景
- 注意點和小技巧
-
- elements和element的差別
- 使用selenium的xpath方法的網頁快速複制
- 無頭使用webdriver的方法:
- 簡單使用selenium
- selenium擷取豆瓣資料以及selenium的元素定位類型
使用背景
從效率來講,能用request子產品得到響應是最好的,但有時候使用request得到的東西并不是自己想要的東西(搞不定),或者說想解析但是比較複雜,在這種情況下就會使用selenium
注意點和小技巧
elements和element的差別
- 使用element元素定位方法時,注意自己找到元素是多個值還是一個值,如果是多個值但隻寫了和element相關的文法,隻會輸出找到的第一個元素,注意element是否有s
# 擷取單個标簽
element = dr.find_element_by_id('s-top-left')
# 擷取多個标簽
element_a = dr.find_elements_by_css_selector('#s-top-left ')
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI2EzX4xSZz91ZsAzNfRHLGZkRGZkRfJ3bs92YscTMfVmepNHL9gzRjZ2U1UTSXlVNKlGT1IkMZVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4MTZhFWO1kzYzMjM0UWN4MDM4QjZiFGNkRWMihTMmdzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
使用selenium的xpath方法的網頁快速複制
- 使用selenium的xpath方法時,可以直接複制網頁中的元素,簡單快捷方法為:選中元素,右鍵——copy——copy Xpath,輸入好方法後,直接複制
# 添加前
element_x = dr.find_elements_by_xpath('')
# 添加後
element_x = dr.find_elements_by_xpath('//*[@id="anony-time"]/div/div[3]/ul/li[4]/a[2]')
無頭使用webdriver的方法:
# 以下代碼可以使浏覽器取消可視化(即不彈出浏覽自動操作),簡稱“無頭浏覽器”
chrome_option = Options()
chrome_option.add_argument('--headless')
chrome_option.add_argument('--disable-gpu')
# options控制浏覽器是否可視化(即是否是無頭浏覽器)
dr = webdriver.Chrome(options=chrome_option) # 切換至除qq輸入法以外的其他輸入法再運作
簡單使用selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 建立浏覽器對象
# 以下代碼可以使浏覽器取消可視化(即不彈出浏覽自動操作),簡稱“無頭浏覽器”
# chrome_option = Options()
# chrome_option.add_argument('--headless')
# chrome_option.add_argument('--disable-gpu')
# options控制浏覽器是否可視化(即是否是無頭浏覽器)
dr = webdriver.Chrome() # 切換至除qq輸入法以外的其他輸入法再運作
# 1 發送請求
dr.get('https://www.baidu.com/')
# 2 儲存快照
dr.save_screenshot('baidu1.png')
# jpg格式 和png差別 :png無損,jpg有損
# 3 檢視網頁代碼
# print(dr.page_source)
# 4 擷取标簽
element = dr.find_element_by_id('s-top-left')
# print(element)
# 擷取多個标簽
element_a = dr.find_elements_by_css_selector('#s-top-left a')
# print('element_a:',element_a)
# 5 擷取标簽包裹的内容
print(element_a[0].text)
# 6 擷取标簽的屬性
print('href:',element_a[2].get_attribute('href'))
# 7 關閉
# 退出目前頁面 不關閉浏覽器
dr.close()
# 關閉浏覽器
# dr.quit()
selenium擷取豆瓣資料以及selenium的元素定位類型
'''
id
class
name
text
取屬性的值
通過文本來擷取資料
模糊查找
'''
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 啟用無頭浏覽
option = Options()
option.add_argument('--headless')
# 啟動
dr = webdriver.Chrome(options=option)
url = 'https://www.douban.com/'
# 發送請求
dr.get(url)
# name
# element_name = dr.find_element_by_name('keywords')
# print(element_name)
# print(element_name.get_attribute('content'))
# id
# element_id = dr.find_elements_by_id('anony-nav')
# print(element_id)
# class_name
# element_class = dr.find_element_by_class_name('lnk-book')
# print(element_class.text)
# xpath 文法//@[]/div
# element_x = dr.find_elements_by_xpath('//*[@id="anony-time"]/div/div[3]/ul/li[4]/a[2]')
# print('======================\n')
# print(element_x[0].text)
# print(element_x[0].get_attribute('href'))
# 标簽
# element_tag = dr.find_elements_by_tag_name('h1')
# print('======================\n')
# print(element_tag)
# print(element_tag.get_attribute('href'))
# 通過text查找資料
# element_text = dr.find_element_by_link_text('豆瓣小組')
# print(element_text.get_attribute('href'))
# 模糊查找
element_re = dr.find_elements_by_partial_link_text('豆瓣')
print('======================\n')
# print(element_re)
print(len(element_re))
for name in element_re:
print(name.text)