1. 什么是selenium?
Selenium是一個用于Web應用程序自動化測試工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作瀏覽器一樣。支持的瀏覽器包括IE,F(xiàn)irefox,Safari,Chrome等。
Selenium可以驅(qū)動瀏覽器自動執(zhí)行自定義好的邏輯代碼,也就是可以通過代碼完全模擬成人類使用瀏覽器自動訪問目標站點并操作,那我們也可以拿它來做爬蟲。
Selenium本質(zhì)上是通過驅(qū)動瀏覽器,完全模擬瀏覽器的操作,比如跳轉(zhuǎn)、輸入、點擊、下拉等...進而拿到網(wǎng)頁渲染之后的結(jié)果,可支持多種瀏覽器。
在日常開發(fā)中我們經(jīng)常使用selenium來完成自動化操作、數(shù)據(jù)爬取等任務。
2. 當作為數(shù)據(jù)爬蟲時什么情況下使用Selenium?
(1)使用selenium的優(yōu)點:
就是可以幫我們避開一系列復雜的通信流程,例如在我們之前學習的requests模塊,那么requests模塊在模擬請求的時候是不是需要把素有的通信流程都分析完成后才能通過請求,然后返回響應。假如目標站點有一系列復雜的通信流程,例如的登錄時的滑動驗證等...那么你使用requests模塊的時候是不是就特別麻煩了。不過你也不需要擔心,因為網(wǎng)站的反爬策略越高,那么用戶的體驗效果就越差,所以網(wǎng)站都需要在用戶的淫威之下降低安全策略。
再看一點requests請求庫能不能執(zhí)行js?是不是不能呀!那么如果你的網(wǎng)站需要發(fā)送ajax請求,異步獲取數(shù)據(jù)渲染到頁面上,是不是就需要使用js發(fā)送請求了。那瀏覽器的特點是什么?是不是可以直接訪問目標站點,然后獲取對方的數(shù)據(jù),從而渲染到頁面上。那這些就是使用selenium的好處!?
(2)使用selenium的缺點:
使用selenium本質(zhì)上是驅(qū)動瀏覽器對目標站點發(fā)送請求,那瀏覽器在訪問目標站點的時候,是不是都需要把靜態(tài)資源都加載完畢。html、css、js這些文件是不是都要等待它加載完成。是不是速度特別慢。那用它的壞處就是效率極低!所以我們一般用它來做登錄驗證。
(3)總結(jié):
使用Selenium在爬取數(shù)據(jù)時既有有點也有缺點,因此需要根絕自己的需求明確是否選擇和使用Selenium。?
3. 安裝和使用selenium
selenium支持包括Chrome、Firefox、Safari、Opera、Edge等眾多瀏覽器,針對不同瀏覽器,需要安裝不同的驅(qū)動器,本文以FireFox瀏覽器為例講解。
(1)安裝FireFox瀏覽器
直接下載和電腦對應版本的friefox瀏覽器
Firefox 火狐瀏覽器 - 全新、安全、快速 | 官方最新下載 下載由致力于互聯(lián)網(wǎng)健康與隱私保護的非營利組織 Mozilla 全力開發(fā)的瀏覽器 — Firefox。Windows、Mac、Linux、Android、與 iOS 版皆可免費下載。https://www.firefox.com.cn/
(2)安裝FireFox瀏覽器驅(qū)動geckodriver
geckodriver是由Mozilla基金會和Mozilla公司開發(fā)的許多應用程序中使用的Web瀏覽器引擎。geckodriver是Selenium中的測試和Firefox瀏覽器之間的鏈接。
Releases · mozilla/geckodriver · GitHubWebDriver for Firefox. Contribute to mozilla/geckodriver development by creating an account on GitHub.https://github.com/mozilla/geckodriver/releases下載對應版本的geckodriver,同時注意firefox瀏覽器版本。下載后,解壓文件,將解壓后的 geokodriver.exe 驅(qū)動器放到Python安裝目錄下
(3)Python下載和安裝selenium庫
使用pip安裝selenium時,可以設(shè)置pip國內(nèi)鏡像地址加快selenium包下載速度
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config list
安裝selenium?
pip install selenium
?驗證是否安裝成功
pip show selenium
(4)在Python中使用selenium實現(xiàn)瀏覽器操作實例
# 瀏覽器自動化工具
from selenium import webdriver
from selenium.webdriver.common.by import By
# MySQL數(shù)據(jù)庫鏈接工具
import pymysql
# 文件操作類
import os
# 時間類
from time import sleep
from docx import Document
import pypandoc
#鏈接MySQL
mysqlCon = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password="123456",
database="toutiao"
)
while True:
cursor = mysqlCon.cursor()
# 執(zhí)行 SQL 查詢語句
cursor.execute("select id,item_id,article_url,title from happy where state = 0 order by read_count asc limit 0,1")
# 獲取查詢結(jié)果
result = cursor.fetchall()
sql = "update happy set state = 1 where id = %s"
id = result[0][0]
cursor.execute(sql,id)
mysqlCon.commit()
articleId = result[0][1]
articleTitle = result[0][3]
# articleId = "7279996073686123068"
# 通過查詢列表獲取未發(fā)布的熱門文章信息,根據(jù)獲取的文章URL 打開URL鏈接地址
# articleId = "7291869777788666407"
# 創(chuàng)建一個瀏覽器實例
browser = webdriver.Firefox()
# # 獲取請求地址
browser.get("https://toutiao.com/group/"+articleId)
sleep(30)
# 根據(jù)元素名稱獲取元素內(nèi)容
textContainer = browser.find_element(By.CLASS_NAME,"syl-article-base")
articleHtml = textContainer.get_attribute("innerHTML")
# 根據(jù)解析的HTML內(nèi)容,獲取文章文本信息和圖片信息,并將文本信息和圖片保存到Word文檔中
# file = open("E:\\studyproject\\python\\toutiao\data\\"+articleId+"\\"+articleId+".html", "r",encoding='utf-8')
os.mkdir("E:\\studyproject\\python\\toutiao\data\\happy\\"+articleId)
output = pypandoc.convert_text(articleHtml, 'docx','html',outputfile="E:\\studyproject\\python\\toutiao\data\\happy\\"+articleId+"\\"+articleTitle+".docx")
sleep(30)
browser.quit()
今日頭條文章做了反爬蟲處理,因此無法直接通過requests請求直接獲取文章詳情信息,因此只能使用selenium。上述代碼示例中我們首先從數(shù)據(jù)庫中獲取已經(jīng)爬取到的熱門文章id,根據(jù)文章id拼接出文章url地址,使用selenium來操作瀏覽器,根據(jù)拼接的url地址打開文章頁面,獲取到文章內(nèi)容標簽元素,獲取頁面內(nèi)容,并將頁面文章文本和圖片內(nèi)容保存到word文檔中。
一分鐘爬取一篇文章,非常低高效
文章來源:http://www.zghlxwxcb.cn/news/detail-765096.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-765096.html
到了這里,關(guān)于Python爬蟲|使用Selenium輕松爬取網(wǎng)頁數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!