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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

文章目錄

  • 網絡爬蟲學習筆記(2)
    • 1 資料
    • 2 筆記
      • 2-1 動態抓取概述
      • 2-2 通過瀏覽器審查元素解析真實網頁地址
      • 2-3 網頁URL地址的規律
      • 2-4 json庫
      • 2-5 通過Selenium模擬瀏覽器抓取

網絡爬蟲學習筆記(2)

1 資料

  • 《Python網絡爬蟲從入門到實踐》唐松,陳志銓。主要面向windows平臺下的python3。

2 筆記

2-1 動態抓取概述

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

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

2-2 通過瀏覽器審查元素解析真實網頁地址

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

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

    2-4 json庫

    • 使用:
      (1)引入json庫import json
      (2)使用json.loads把字符串格式的響應體數據轉化為json數據json_date = json.load(req_1.text)

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

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

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

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

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

      檢查可以看到的內容
      運行上述代碼,得到的結果是:“第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()查找比其他查找函數好一些。
    • Selenium常見的操作元素方法·Clear清除元素的內容。·send_keys模擬按鍵輸入。·Click單擊元素。·Submit提交表單。
    • 用Selenium控制瀏覽器加載的內容(火狐使用FirefoxProfile().set_preference()函數調整),可以加快Selenium的爬取速度,常用的方法有:
      (1)控制CSS(用來控制頁面的外觀和元素放置位置的)的加載。
      (2)控制圖片文件的顯示。
      (3)控制JavaScript的運行。
    • Selenium的官方網站

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。