爬虫 页面元素变化_爬虫 基本知识 萌新
爬蟲
定義
網絡爬蟲(又稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。個人理解就是,從互聯網上獲取數據,進行自動化,規范化,也就是說,取代人去做繁重的數據采集。再者使用selenium等,可以模擬瀏覽器,寫交互性的自動化腳本,本質都是解放人力
本質
```文本 本質上,爬蟲就是獲取網頁,然后解析網頁,最后得到開發者想要的數據。 這么說是不夠正確的,或者說,只是爬蟲常用的一部分,是對爬蟲的一種淺顯的理解,實際上,我感覺爬蟲就像是模擬瀏覽器,但是卻通過個人的分析,選擇需要加載的去加載,獲取想要獲取的。
## 關鍵點 主要就是兩個部分,一個就是定位數據(定位節點),另外一個就是從節點獲取數據,或者模擬操作。關于對節點的定位,一種就是普通的通過特殊屬性值等來篩選,另外一種就是通過父子節點,兄弟等關系進行推到,因為前端設計的時侯一般是分為幾個部分去做的,而且渲染也是在特定的地方進行渲染,所以父子節點的關系,能夠良好的對列表進行分析。## 工具 我個人是常用**python**寫爬蟲的類型,因為它有很多強大的庫,而且性能也很不錯。例如使用requests庫,非常簡單,方便,且強大。然后想要批量,高效率的進行爬蟲,可以使用**Scrapy** 去進行項目式的開發,個人感覺是沒有明確的界限,當你需要什么就用什么,不要局限于框架。 其次,**java**上的開發就沒有那么方便,可能是因為我對java爬蟲知之甚少吧。(常用jousp以及正則去進行html解析)## 關于pythonn爬蟲 通過**requests**等庫去獲取網頁,然后解析網頁。 ```解析的常用方法通過兩類 1,是通過id,class,以及其他屬性去進行鎖定標簽。然后提取數據。 2,是通過正則表達式去進行字符串匹配 個人感覺第一種簡單,方便。但是第二種同樣不可獲缺,是必須要進行學習的東西,否則爬蟲在某些情況可能回降低寫程序的思路。Scrapy爬蟲框架
這個框架的最大優勢就是非常的高效率,適用于對于一個網站的各個階級的頁面的爬蟲。這些頁面之間通常能夠形成鏈式的關系?;蛘咄瑢拥年P系 Scrapy多線程并發,效率極高。關于反爬蟲
對于部分網站是可以直接解析進行爬蟲的,但是并不是全部,有些網站針對這種情況進行了防范 - 常見的防范辦法是判斷header請求頭,IP,以及一些根據反映速度等等鬼才點子進行反爬蟲。
所以要寫一個好爬蟲,就需要偽造,學會偽裝自己,寫好請求頭,IP,以及控制反應速度等等。具體代碼,可以自行百度關于Selenium
這可以說是一個終極武器, 簡單的來說,就是真正的去打開一個模擬器,然后加載網頁,獲取網頁數據,
有好處也有壞處 好處是可以獲取到更加全面的資源,跳過繁重的api接口分析。直接獲取加載的數據。 壞處是不加以選擇的加載數據,效率極低。綜上,雖然有缺點,但是還是挺有用的,至少能夠進行方便的瀏覽器點擊,輸入等模擬操作,在進行操作自動化的時侯用處很大。
實現方法是次要的,重要的是思維方式,上層決定下層的運作
Seleniumd 的使用技巧
這里強推chrome加上selenium,效率杠杠的
首先解釋一下,python是一門解釋性語言
解釋性語言定義:程序不需要編譯,在運行程序的時候才翻譯,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就需要逐行翻譯一次,效率比較低。現代解釋性語言通常把源程序編譯成中間代碼,然后用解釋器把中間代碼一條條翻譯成目標機器代碼,一條條執行。因為selenium的創建時十分耗時的,所以這并不方便于我們開發調試,比如點擊某個按鍵等等。 綜上,我們使用console進行開發測試:
這樣,可以比如先定位到某個元素,然后邊解釋,邊執行,和juypter很像
同時,結合chrome去進行元素的定位 比如通過css_selector
content = browser.find_element_by_css_selector('#app > div > div.home-page.f-clear > div.home-container > div > div.center-panel > div.card-list > div.feed-card > div.content > div:nth-child(2) > div.main-content > div.card-content > div.post-content > div > div.text.p-rel.description > div')或者xpath(也就是dom樹
browser.find_element_by_xpath()爬蟲的工具使用,chrome
最好用的工具之一,就像開發前端一樣,可以通過這個查看獲取了哪些資源,明白頁面節點間的關系。狠方便。
使用搜索功能搜索數據 有寫網站的數據不是直接靜態的寫載html中的,現在很多都是動態的用ajax等技術從后端獲取,然后利用js渲染好節點數據。 所以怎樣知道自己想要的數據在哪個端口呢。
- 在html中查看數據節點的命名方式。(通常會保持一致)
- 利用搜索工具搜索出想要信息,排查。
關于數據定位
對于某些網站,他們的數據往往沒有那么直觀就能再html或者某個json接口中就直接找到,可能他們的數據格式不一樣。經過了一定處理,比如四舍五入,或者統計計算(比如我碰到的東方財富網站)。這時候我們就需要對網站進行分析了。要了解其內部js是如何運算數據的,以及最后得出結果。 這里講一個簡單的,對dom樹進行監控。這里檢測dom樹節點什么時候發生變化。
通過這樣再元素那對節點進行監控,當節點改變時,就會debug:暫停
這樣就定位到了js如何變化
還有直接對js進行斷點的,但是沒有這個好用。
分布式,多線程等技術
使用這些批量的爬蟲技術,主要是為了提高效率,因為時間很重要,要在規定時間內將數據又快又好的爬取出來。 - 我主要使用python里面的多線程,協程進行爬取,具體做法 協程博客 - 注意爬取的速度, 太快反而會導致錯誤 - 使用偽裝
常用框架:scrapy
反爬蟲
這也很重要,對于爬蟲是不可或缺的。
分級層爬取,
盡量將數據存儲到本地,哪怕其中部分不是我最終需要的數據,只要是中間過程的一步,在不影響整體速度的前提下,盡量將中間數據也存儲到本地。
本地數據的讀取速度是很快的,重要的是,減少目標服務器的壓力。
確保數據整體的正確性
很多時候,我們并不能一次性就把握住某個接口的全部特性,那么我們需要盡量的多做測試,在擁有足夠多的數據樣本的情況下,去進行判斷。
明白樣本和整體的意義。
總結
以上是生活随笔為你收集整理的爬虫 页面元素变化_爬虫 基本知识 萌新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中可通过()实现代码的复用_
- 下一篇: html网页放大时文字不换行_WEB前端