日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python网络爬虫学习笔记(6)动态网页抓取(一)知识

發(fā)布時(shí)間:2023/12/29 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python网络爬虫学习笔记(6)动态网页抓取(一)知识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 網(wǎng)絡(luò)爬蟲學(xué)習(xí)筆記(2)
    • 1 資料
    • 2 筆記
      • 2-1 動態(tài)抓取概述
      • 2-2 通過瀏覽器審查元素解析真實(shí)網(wǎng)頁地址
      • 2-3 網(wǎng)頁URL地址的規(guī)律
      • 2-4 json庫
      • 2-5 通過Selenium模擬瀏覽器抓取

網(wǎng)絡(luò)爬蟲學(xué)習(xí)筆記(2)

1 資料

  • 《Python網(wǎng)絡(luò)爬蟲從入門到實(shí)踐》唐松,陳志銓。主要面向windows平臺下的python3。

2 筆記

2-1 動態(tài)抓取概述

在使用JavaScript時(shí),很多內(nèi)容并不會出現(xiàn)在HTML源代碼中,所以爬取靜態(tài)網(wǎng)頁的技術(shù)可能無法正常使用。因此,我們需要用到動態(tài)網(wǎng)頁抓取的兩種技術(shù):通過瀏覽器審查元素解析真實(shí)網(wǎng)頁地址和使用selenium模擬瀏覽器的方法。

  • 異步更新技術(shù)AJAX(Asynchronous Javascript And XML,異步JavaScript和XML),通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換就可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下對網(wǎng)頁的某部分進(jìn)行更新。例如百度搜索界面的皮膚:
  • 爬取里面使用AJAX動態(tài)加載的內(nèi)容的兩種方法:
    (1)通過瀏覽器審查元素解析地址。
    (2)通過Selenium模擬瀏覽器抓取。
  • json數(shù)據(jù)直接打印顯得又多又亂,可以使用json庫提取想要的信息

2-2 通過瀏覽器審查元素解析真實(shí)網(wǎng)頁地址

  • chrom瀏覽器右鍵菜單“檢查”
  • 單擊“Network”選項(xiàng),然后刷新網(wǎng)頁。此時(shí),Network會顯示瀏覽器從網(wǎng)頁服務(wù)器中得到的所有文件,一般這個(gè)過程稱為“抓包”。
  • 找到真實(shí)的數(shù)據(jù)地址。選擇需要的文件,單擊Preview標(biāo)簽即可查看數(shù)據(jù),而Headers標(biāo)簽里則可以找到數(shù)據(jù)地址(就是Request URL那一項(xiàng))。
  • 獲得了地址,再想爬取就只用把link換成3里找到的數(shù)據(jù)地址。
  • 2-3 網(wǎng)頁URL地址的規(guī)律

    例如有些URL地址中有兩個(gè)特別重要的變量offset和limit,offset顯示本頁第一項(xiàng)是總的第幾項(xiàng),limit表示每頁項(xiàng)目數(shù)。基于此,書中給了一個(gè)很好的例子(這個(gè)例子中,不同頁數(shù)的評論真實(shí)地址之間只體現(xiàn)在offset,所以才有page_str這個(gè)變量):

    2-4 json庫

    • 使用:
      (1)引入json庫import json
      (2)使用json.loads把字符串格式的響應(yīng)體數(shù)據(jù)轉(zhuǎn)化為json數(shù)據(jù)json_date = json.load(req_1.text)

    2-5 通過Selenium模擬瀏覽器抓取

    使用本方法無需2-1的操作,直接用網(wǎng)頁網(wǎng)址即可

    因此,這里介紹另一種方法,即使用瀏覽器渲染引擎。直接用瀏覽器在顯示網(wǎng)頁時(shí)解析HTML、應(yīng)用CSS樣式并執(zhí)行JavaScript的語句。
    這個(gè)方法在爬蟲過程中會打開一個(gè)瀏覽器加載該網(wǎng)頁,自動操作瀏覽器瀏覽各個(gè)網(wǎng)頁,順便把數(shù)據(jù)抓下來。用一句簡單而通俗的話說,就是使用瀏覽器渲染方法將爬取動態(tài)網(wǎng)頁變成爬取靜態(tài)網(wǎng)頁。
    我們可以用Python的Selenium庫模擬瀏覽器完成抓取。Selenium是一個(gè)用于Web應(yīng)用程序測試的工具。Selenium測試直接運(yùn)行在瀏覽器中,瀏覽器自動按照腳本代碼做出單擊、輸入、打開、驗(yàn)證等操作,就像真正的用戶在操作一樣。

    • 安裝 pip install selenium
    • 下載geckodriver,在環(huán)境變量的PATH中加入這個(gè)geckodriver的地址
    • 要使用瀏覽器,可能會需要相應(yīng)的driver,例如Chromedriver。關(guān)于Chromedriver的下載,可以參考這個(gè)博客:
      ChromeDriver與Chrome版本對應(yīng)參照表及ChromeDriver下載鏈接
    • 上述內(nèi)容的簡單例子:
    from selenium import webdriver from selenium.webdriver.chrome.webdriver import WebDriver # 產(chǎn)生DesiredCapabilities()對象,并修改對應(yīng)字典的默認(rèn)值,不過對于使用chrom暫時(shí)沒什么用 caps = webdriver.DesiredCapabilities().CHROME # 要調(diào)用的瀏覽器driver地址,根據(jù)瀏覽器不同實(shí)現(xiàn)方式會有所差別 # chrom.webdriver里對應(yīng)的參數(shù)需要的是一個(gè)字符串,如果不給數(shù)據(jù)它會去找$PATH executable_path = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe' # 產(chǎn)生對象 driver = WebDriver(executable_path=executable_path) driver.get('https://greasyfork.org/zh-CN/scripts')

    • 書中給的例子仍舊是評論,在driver調(diào)用get()以后,driver.find_element_by_css_selector表示用CSS選擇器查找元素,找到class為bdy-inner的div元素;find_element_by_tag_name表示通過元素的tag尋找,意思是找到comment中的p元素。
      具體增加代碼

      檢查可以看到的內(nèi)容
      運(yùn)行上述代碼,得到的結(jié)果是:“第35條測試評論”
    • 書中還提及單擊特定位置的方法:
      使用driver.find_element_by_css_selector()(還有許多其他查找方法,這里只提這一種)找到該元素,然后使用.click()方法模擬單擊
    load_more = driver.find_element_by_css_selector('div.tie-load-more') load_more.click()
    • Selenium中通過find_element_by_xpath()和find_element_by_css_selector()查找比其他查找函數(shù)好一些。
    • Selenium常見的操作元素方法·Clear清除元素的內(nèi)容。·send_keys模擬按鍵輸入。·Click單擊元素。·Submit提交表單。
    • 用Selenium控制瀏覽器加載的內(nèi)容(火狐使用FirefoxProfile().set_preference()函數(shù)調(diào)整),可以加快Selenium的爬取速度,常用的方法有:
      (1)控制CSS(用來控制頁面的外觀和元素放置位置的)的加載。
      (2)控制圖片文件的顯示。
      (3)控制JavaScript的運(yùn)行。
    • Selenium的官方網(wǎng)站

    總結(jié)

    以上是生活随笔為你收集整理的python网络爬虫学习笔记(6)动态网页抓取(一)知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。