国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python使用Selenium Webdriver爬取網(wǎng)頁(yè)所有內(nèi)容

這篇具有很好參考價(jià)值的文章主要介紹了Python使用Selenium Webdriver爬取網(wǎng)頁(yè)所有內(nèi)容。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、為什么我抓不到網(wǎng)頁(yè)的全部html內(nèi)容

有時(shí)候,我們?cè)谟胾rllib或者requests庫(kù)抓取頁(yè)面時(shí),得到的html源代碼和瀏覽器中看到的不一樣。這將是我們面臨的一個(gè)非常常見(jiàn)的問(wèn)題?,F(xiàn)在網(wǎng)頁(yè)越來(lái)越多地采用Ajax、前端模塊化工具來(lái)構(gòu)建,整個(gè)網(wǎng)頁(yè)可能都是由JavaScript渲染出來(lái)的,也就是說(shuō)原始的HTML代碼可能就是一個(gè)空殼,例如:

<!DOCTYPE html>
<html>
    
    <head>
        <meta charset="UTF-8">
        <title>
            this is a demo
        </title>
    </head>
    
    <body>
        <div id="container">
        </div>
    </body>
    <script src="app.js">
    </script>

</html>

body節(jié)點(diǎn)里面只有一個(gè)id為container的節(jié)點(diǎn),但是需要注意在body節(jié)點(diǎn)后引入了app.js, 它便負(fù)責(zé)整個(gè)網(wǎng)站的渲染。

在瀏覽器中打開(kāi)這個(gè)頁(yè)面時(shí),首先會(huì)加載這個(gè)HTML內(nèi)容,接著瀏覽器會(huì)發(fā)現(xiàn)其中引入了一個(gè)app.js文件,然后便會(huì)接著去請(qǐng)求這個(gè)文件,獲取到該文件后,便會(huì)執(zhí)行其中的JavaScript代碼,而JavaScript則會(huì)改變HTML中的節(jié)點(diǎn),向其中添加內(nèi)容,最后得到完整的頁(yè)面。

但是在用urllib或者requests等庫(kù)請(qǐng)求當(dāng)前頁(yè)面時(shí),我們得到的只是這個(gè)HTML代碼,它不會(huì)幫助我們?nèi)ダ^續(xù)加載這個(gè)JavaScript文件,這樣也就看不到瀏覽器中的內(nèi)容了。

而且,JavaScript動(dòng)態(tài)渲染的頁(yè)面可不止Ajax這一種,還有其他各種原因會(huì)導(dǎo)致我們得到的源代碼和瀏覽器中看到的不一樣。

對(duì)于抓不到全部html內(nèi)容的情況,我們能采取什么應(yīng)對(duì)措施呢,本文介紹一種可行的方法,就是通過(guò)Selenium webdriver來(lái)模擬瀏覽器運(yùn)行的方式,這樣就可以做到在瀏覽器中看到是什么樣,抓取的源碼就是什么樣,也就是可見(jiàn)即可爬。這樣,我們就不用再去管網(wǎng)頁(yè)內(nèi)部的JavaScript用了什么算法渲染頁(yè)面,也不用管網(wǎng)頁(yè)后臺(tái)的Ajax接口到底有哪些參數(shù)。所有的這些,都交給Selenium webdriver來(lái)幫我們完成。

二、Selenium的基本使用

Selenium是一個(gè)自動(dòng)化測(cè)試工具,利用它可以驅(qū)動(dòng)瀏覽器執(zhí)行特定的動(dòng)作,如點(diǎn)擊、下拉等操作,同時(shí)還可以獲取瀏覽器當(dāng)前呈現(xiàn)的頁(yè)面的源代碼,做到可見(jiàn)即可爬。對(duì)于一些JavaScript動(dòng)態(tài)渲染的頁(yè)面來(lái)說(shuō),此種抓取方式非常有效。

Selenium webdriver的安裝和基本使用方法,可以參考另一篇文章。
Python使用Selenium WebDriver的入門介紹及安裝教程

Selenium的官方網(wǎng)站:
Selenium WebDriver

一些基本的用法,此處不再贅述。

三、使用Selenium抓取全部HTML

先看使用requests庫(kù)直接提取到的代碼,可以發(fā)現(xiàn)并不是完整的:

Python使用Selenium Webdriver爬取網(wǎng)頁(yè)所有內(nèi)容

使用Selenium拿到的html代碼,可以看到已經(jīng)可以通過(guò)src屬性提取到圖片的url:

Python使用Selenium Webdriver爬取網(wǎng)頁(yè)所有內(nèi)容

示例代碼如下,詳細(xì)的解讀可以參考每一步的注釋:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-400218.html

from selenium.webdriver import Firefox, FirefoxOptions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

class ContentPageParser():
    def __init__(self, content_page_url) -> None:
        self.content_url = content_page_url # 抓取content_page_url頁(yè)面上全部的圖片url
        self.img_src = []                   # 保存當(dāng)前頁(yè)面上所有的圖片url
    
    def visit_content_page_with_firefox(self):
        option = FirefoxOptions()
        # 設(shè)置瀏覽器為無(wú)頭模式,使用過(guò)程中不會(huì)彈出瀏覽器頁(yè)面
        option.headless = True
        self.driver = Firefox(options=option)
        try:
            # 打開(kāi)待抓取的url頁(yè)面
            self.driver.get(self.content_url)
            # 設(shè)置靈活等待,最長(zhǎng)等待10s,輪詢間隔為1s
            wait = WebDriverWait(self.driver, timeout=10, poll_frequency=1)
            # 使用css選擇器進(jìn)行元素定位,直到元素可見(jiàn)為止
            wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'img[class="showimg"]')))
            # 使用css選擇器查找所有元素
            imgs = self.driver.find_elements(By.CSS_SELECTOR, 'img[class="showimg"]')
            # 提取所有圖片的url
            for img in imgs:
                self.img_src.append(img.get_attribute('src'))
        except Exception as e:
            print(repr(e))
        finally:
            # 關(guān)閉webdriver
            self.driver.close() 
    
    def get_img_src(self):
        return self.img_src
    
if __name__ == '__main__':
    content_parser = ContentPageParser('https://xxx/content_48495.html')
    content_parser.visit_content_page_with_firefox()
    img = content_parser.get_img_src()
    print(img)

到了這里,關(guān)于Python使用Selenium Webdriver爬取網(wǎng)頁(yè)所有內(nèi)容的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python爬蟲|使用Selenium輕松爬取網(wǎng)頁(yè)數(shù)據(jù)

    Python爬蟲|使用Selenium輕松爬取網(wǎng)頁(yè)數(shù)據(jù)

    1. 什么是selenium? Selenium是一個(gè)用于Web應(yīng)用程序自動(dòng)化測(cè)試工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作瀏覽器一樣。支持的瀏覽器包括IE,F(xiàn)irefox,Safari,Chrome等。 Selenium可以驅(qū)動(dòng)瀏覽器自動(dòng)執(zhí)行自定義好的邏輯代碼,也就是可以通過(guò)代碼完全模擬成人類使用

    2024年02月04日
    瀏覽(32)
  • 華納云:Python中如何使用Selenium爬取網(wǎng)頁(yè)數(shù)據(jù)

    這篇文章主要介紹“Python中如何使用Selenium爬取網(wǎng)頁(yè)數(shù)據(jù)”,在日常操作中,相信很多人在Python中如何使用Selenium爬取網(wǎng)頁(yè)數(shù)據(jù)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Python中如何使用Selenium爬取網(wǎng)頁(yè)數(shù)據(jù)”的疑惑有所幫助!接下

    2024年02月07日
    瀏覽(26)
  • Python網(wǎng)絡(luò)爬蟲逆向分析爬取動(dòng)態(tài)網(wǎng)頁(yè)、使用Selenium庫(kù)爬取動(dòng)態(tài)網(wǎng)頁(yè)、?編輯將數(shù)據(jù)存儲(chǔ)入MongoDB數(shù)據(jù)庫(kù)

    Python網(wǎng)絡(luò)爬蟲逆向分析爬取動(dòng)態(tài)網(wǎng)頁(yè)、使用Selenium庫(kù)爬取動(dòng)態(tài)網(wǎng)頁(yè)、?編輯將數(shù)據(jù)存儲(chǔ)入MongoDB數(shù)據(jù)庫(kù)

    目錄 逆向分析爬取動(dòng)態(tài)網(wǎng)頁(yè) 了解靜態(tài)網(wǎng)頁(yè)和動(dòng)態(tài)網(wǎng)頁(yè)區(qū)別 1.判斷靜態(tài)網(wǎng)頁(yè) ?2.判斷動(dòng)態(tài)網(wǎng)頁(yè) ?逆向分析爬取動(dòng)態(tài)網(wǎng)頁(yè) 使用Selenium庫(kù)爬取動(dòng)態(tài)網(wǎng)頁(yè) 安裝Selenium庫(kù)以及下載瀏覽器補(bǔ)丁 頁(yè)面等待 ?頁(yè)面操作 1.填充表單 2.執(zhí)行JavaScript 元素選取 Selenium庫(kù)的find_element的語(yǔ)法使用格式如下

    2024年02月15日
    瀏覽(65)
  • 使用Python和Selenium抓取網(wǎng)頁(yè)內(nèi)容

    使用Python和Selenium抓取網(wǎng)頁(yè)內(nèi)容

    采集動(dòng)態(tài)網(wǎng)頁(yè)是困擾許多人的難題,不妨使用 Python 和 Selenium抓取網(wǎng)頁(yè)數(shù)據(jù)。 微信搜索關(guān)注《Python學(xué)研大本營(yíng)》,加入讀者群,分享更多精彩 你是否對(duì)從網(wǎng)站提取數(shù)據(jù)感興趣,但發(fā)現(xiàn)自己被網(wǎng)絡(luò)抓取的復(fù)雜性所困擾?不要害怕,我們?cè)谶@篇文章中將展示如何利用 Selenium 和

    2024年02月07日
    瀏覽(51)
  • python爬蟲進(jìn)階篇:Scrapy中使用Selenium模擬Firefox火狐瀏覽器爬取網(wǎng)頁(yè)信息

    接著上一篇的筆記,Scrapy爬取普通無(wú)反爬、靜態(tài)頁(yè)面的網(wǎng)頁(yè)時(shí)可以順利爬取我們要的信息。但是大部分情況下我們要的數(shù)據(jù)所在的網(wǎng)頁(yè)它是動(dòng)態(tài)加載出來(lái)的(ajax請(qǐng)求后傳回前端頁(yè)面渲染、js調(diào)用function等)。這種情況下需要使用selenium進(jìn)行模擬人工操作瀏覽器行為,實(shí)現(xiàn)自動(dòng)化

    2024年02月04日
    瀏覽(101)
  • 100天玩轉(zhuǎn)python——day67 使用Selenium抓取網(wǎng)頁(yè)動(dòng)態(tài)內(nèi)容

    根據(jù)權(quán)威機(jī)構(gòu)發(fā)布的全球互聯(lián)網(wǎng)可訪問(wèn)性審計(jì)報(bào)告,全球約有四分之三的網(wǎng)站其內(nèi)容或部分內(nèi)容是通過(guò)JavaScript動(dòng)態(tài)生成的,這就意味著在瀏覽器窗口中“查看網(wǎng)頁(yè)源代碼”時(shí)無(wú)法在HTML代碼中找到這些內(nèi)容,也就是說(shuō)我們之前用的抓取數(shù)據(jù)的方式無(wú)法正常運(yùn)轉(zhuǎn)了。解決這樣的

    2024年02月09日
    瀏覽(46)
  • Python爬取網(wǎng)頁(yè)Flex渲染的動(dòng)態(tài)內(nèi)容

    Python爬取網(wǎng)頁(yè)Flex渲染的動(dòng)態(tài)內(nèi)容

    我最近使用Python爬取網(wǎng)頁(yè)內(nèi)容時(shí)遇到Flex渲染的動(dòng)態(tài)頁(yè)面,比如下圖的課程目錄標(biāo)題,此時(shí)按鼠標(biāo)右鍵,菜單里沒(méi)有復(fù)制鏈接的選項(xiàng)。 我的目的是:獲取各個(gè)視頻標(biāo)題、鏈接。 按F12進(jìn)入開(kāi)發(fā)者模式分析網(wǎng)頁(yè),可見(jiàn)有多個(gè)flex標(biāo)簽,像這種通過(guò)flex動(dòng)態(tài)渲染的網(wǎng)頁(yè),視頻鏈接隱藏

    2024年02月04日
    瀏覽(75)
  • C#使用Selenium WebDriver模擬人工操作網(wǎng)頁(yè)方法

    目錄 1.Selenium WebDriver使用方法 2.Selenium WebDriver安裝方法 1.Selenium WebDriver使用方法 在C#中模擬人工操作網(wǎng)頁(yè)通常需要使用Web自動(dòng)化工具或庫(kù)來(lái)實(shí)現(xiàn)。一種常用的方式是使用Selenium WebDriver,它是一個(gè)用于自動(dòng)化Web瀏覽器操作的工具,支持多種瀏覽器,包括Chrome、Firefox、Edge等。以

    2024年02月06日
    瀏覽(26)
  • 一個(gè)月學(xué)通Python(三十四):使用Selenium模擬人工操作及獲取網(wǎng)頁(yè)內(nèi)容

    結(jié)合自身經(jīng)驗(yàn)和內(nèi)部資料總結(jié)的Python教程,每天3-5章,最短1個(gè)月就能全方位的完成Python的學(xué)習(xí)并進(jìn)行實(shí)戰(zhàn)開(kāi)發(fā),學(xué)完了定能成為大佬!加油吧!卷起來(lái)! 全部文章請(qǐng)?jiān)L問(wèn)專欄:《Python全棧教程(0基礎(chǔ))》 再推薦一下最近熱更的:《大廠測(cè)試高頻面試題詳解》 該專欄對(duì)近年

    2024年02月13日
    瀏覽(28)
  • Python實(shí)戰(zhàn):用Selenium爬取網(wǎng)頁(yè)數(shù)據(jù)

    網(wǎng)絡(luò)爬蟲是Python編程中一個(gè)非常有用的技巧,它可以讓您自動(dòng)獲取網(wǎng)頁(yè)上的數(shù)據(jù)。在本文中,我們將介紹如何使用Selenium庫(kù)來(lái)爬取網(wǎng)頁(yè)數(shù)據(jù),特別是那些需要模擬用戶交互的動(dòng)態(tài)網(wǎng)頁(yè)。 Selenium是一個(gè)自動(dòng)化測(cè)試工具,它可以模擬用戶在瀏覽器中的操作,比如點(diǎn)擊按鈕、填寫表

    2024年02月06日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包