python网络爬虫学习笔记(6)动态网页抓取(一)知识
文章目錄
- 網(wǎng)絡(luò)爬蟲學(xué)習(xí)筆記(2)
- 1 資料
- 2 筆記
- 2-1 動(dòng)態(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平臺(tái)下的python3。
2 筆記
2-1 動(dòng)態(tài)抓取概述
在使用JavaScript時(shí),很多內(nèi)容并不會(huì)出現(xiàn)在HTML源代碼中,所以爬取靜態(tài)網(wǎng)頁的技術(shù)可能無法正常使用。因此,我們需要用到動(dòng)態(tài)網(wǎng)頁抓取的兩種技術(shù):通過瀏覽器審查元素解析真實(shí)網(wǎng)頁地址和使用selenium模擬瀏覽器的方法。
- 異步更新技術(shù)AJAX(Asynchronous Javascript And XML,異步JavaScript和XML),通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換就可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下對(duì)網(wǎng)頁的某部分進(jìn)行更新。例如百度搜索界面的皮膚:
- 爬取里面使用AJAX動(dòng)態(tài)加載的內(nèi)容的兩種方法:
(1)通過瀏覽器審查元素解析地址。
(2)通過Selenium模擬瀏覽器抓取。 - json數(shù)據(jù)直接打印顯得又多又亂,可以使用json庫提取想要的信息
2-2 通過瀏覽器審查元素解析真實(shí)網(wǎng)頁地址
2-3 網(wǎng)頁URL地址的規(guī)律
例如有些URL地址中有兩個(gè)特別重要的變量offset和limit,offset顯示本頁第一項(xiàng)是總的第幾項(xiàng),limit表示每頁項(xiàng)目數(shù)。基于此,書中給了一個(gè)很好的例子(這個(gè)例子中,不同頁數(shù)的評(píng)論真實(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è)方法在爬蟲過程中會(huì)打開一個(gè)瀏覽器加載該網(wǎng)頁,自動(dòng)操作瀏覽器瀏覽各個(gè)網(wǎng)頁,順便把數(shù)據(jù)抓下來。用一句簡單而通俗的話說,就是使用瀏覽器渲染方法將爬取動(dòng)態(tài)網(wǎng)頁變成爬取靜態(tài)網(wǎng)頁。
我們可以用Python的Selenium庫模擬瀏覽器完成抓取。Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,瀏覽器自動(dòng)按照腳本代碼做出單擊、輸入、打開、驗(yàn)證等操作,就像真正的用戶在操作一樣。
- 安裝 pip install selenium
- 下載geckodriver,在環(huán)境變量的PATH中加入這個(gè)geckodriver的地址
- 要使用瀏覽器,可能會(huì)需要相應(yīng)的driver,例如Chromedriver。關(guān)于Chromedriver的下載,可以參考這個(gè)博客:
ChromeDriver與Chrome版本對(duì)應(yīng)參照表及ChromeDriver下載鏈接 - 上述內(nèi)容的簡單例子:
- 書中給的例子仍舊是評(píng)論,在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條測(cè)試評(píng)論” - 書中還提及單擊特定位置的方法:
使用driver.find_element_by_css_selector()(還有許多其他查找方法,這里只提這一種)找到該元素,然后使用.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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程 第三章:类图
- 下一篇: 【数据结构】一个简单的计算器