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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫 页面元素变化_爬虫 基本知识 萌新

發(fā)布時間:2024/7/23 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫 页面元素变化_爬虫 基本知识 萌新 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

爬蟲

定義

網(wǎng)絡(luò)爬蟲(又稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。

個人理解就是,從互聯(lián)網(wǎng)上獲取數(shù)據(jù),進(jìn)行自動化,規(guī)范化,也就是說,取代人去做繁重的數(shù)據(jù)采集。再者使用selenium等,可以模擬瀏覽器,寫交互性的自動化腳本,本質(zhì)都是解放人力

本質(zhì)

```文本 本質(zhì)上,爬蟲就是獲取網(wǎng)頁,然后解析網(wǎng)頁,最后得到開發(fā)者想要的數(shù)據(jù)。 這么說是不夠正確的,或者說,只是爬蟲常用的一部分,是對爬蟲的一種淺顯的理解,實(shí)際上,我感覺爬蟲就像是模擬瀏覽器,但是卻通過個人的分析,選擇需要加載的去加載,獲取想要獲取的。

## 關(guān)鍵點(diǎn) 主要就是兩個部分,一個就是定位數(shù)據(jù)(定位節(jié)點(diǎn)),另外一個就是從節(jié)點(diǎn)獲取數(shù)據(jù),或者模擬操作。關(guān)于對節(jié)點(diǎn)的定位,一種就是普通的通過特殊屬性值等來篩選,另外一種就是通過父子節(jié)點(diǎn),兄弟等關(guān)系進(jìn)行推到,因為前端設(shè)計的時侯一般是分為幾個部分去做的,而且渲染也是在特定的地方進(jìn)行渲染,所以父子節(jié)點(diǎn)的關(guān)系,能夠良好的對列表進(jìn)行分析。## 工具 我個人是常用**python**寫爬蟲的類型,因為它有很多強(qiáng)大的庫,而且性能也很不錯。例如使用requests庫,非常簡單,方便,且強(qiáng)大。然后想要批量,高效率的進(jìn)行爬蟲,可以使用**Scrapy** 去進(jìn)行項目式的開發(fā),個人感覺是沒有明確的界限,當(dāng)你需要什么就用什么,不要局限于框架。 其次,**java**上的開發(fā)就沒有那么方便,可能是因為我對java爬蟲知之甚少吧。(常用jousp以及正則去進(jìn)行html解析)## 關(guān)于pythonn爬蟲 通過**requests**等庫去獲取網(wǎng)頁,然后解析網(wǎng)頁。 ```解析的常用方法通過兩類 1,是通過id,class,以及其他屬性去進(jìn)行鎖定標(biāo)簽。然后提取數(shù)據(jù)。 2,是通過正則表達(dá)式去進(jìn)行字符串匹配 個人感覺第一種簡單,方便。但是第二種同樣不可獲缺,是必須要進(jìn)行學(xué)習(xí)的東西,否則爬蟲在某些情況可能回降低寫程序的思路。

Scrapy爬蟲框架

這個框架的最大優(yōu)勢就是非常的高效率,適用于對于一個網(wǎng)站的各個階級的頁面的爬蟲。這些頁面之間通常能夠形成鏈?zhǔn)降年P(guān)系。或者同層的關(guān)系 Scrapy多線程并發(fā),效率極高。

關(guān)于反爬蟲

對于部分網(wǎng)站是可以直接解析進(jìn)行爬蟲的,但是并不是全部,有些網(wǎng)站針對這種情況進(jìn)行了防范 - 常見的防范辦法是判斷header請求頭,IP,以及一些根據(jù)反映速度等等鬼才點(diǎn)子進(jìn)行反爬蟲。

所以要寫一個好爬蟲,就需要偽造,學(xué)會偽裝自己,寫好請求頭,IP,以及控制反應(yīng)速度等等。具體代碼,可以自行百度

關(guān)于Selenium

這可以說是一個終極武器, 簡單的來說,就是真正的去打開一個模擬器,然后加載網(wǎng)頁,獲取網(wǎng)頁數(shù)據(jù),

有好處也有壞處 好處是可以獲取到更加全面的資源,跳過繁重的api接口分析。直接獲取加載的數(shù)據(jù)。 壞處是不加以選擇的加載數(shù)據(jù),效率極低。

綜上,雖然有缺點(diǎn),但是還是挺有用的,至少能夠進(jìn)行方便的瀏覽器點(diǎn)擊,輸入等模擬操作,在進(jìn)行操作自動化的時侯用處很大。

實(shí)現(xiàn)方法是次要的,重要的是思維方式,上層決定下層的運(yùn)作

Seleniumd 的使用技巧

這里強(qiáng)推chrome加上selenium,效率杠杠的

首先解釋一下,python是一門解釋性語言

解釋性語言定義:程序不需要編譯,在運(yùn)行程序的時候才翻譯,每個語句都是執(zhí)行的時候才翻譯。這樣解釋性語言每執(zhí)行一次就需要逐行翻譯一次,效率比較低。現(xiàn)代解釋性語言通常把源程序編譯成中間代碼,然后用解釋器把中間代碼一條條翻譯成目標(biāo)機(jī)器代碼,一條條執(zhí)行。

因為selenium的創(chuàng)建時十分耗時的,所以這并不方便于我們開發(fā)調(diào)試,比如點(diǎn)擊某個按鍵等等。 綜上,我們使用console進(jìn)行開發(fā)測試:

這樣,可以比如先定位到某個元素,然后邊解釋,邊執(zhí)行,和juypter很像

同時,結(jié)合chrome去進(jìn)行元素的定位 比如通過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

最好用的工具之一,就像開發(fā)前端一樣,可以通過這個查看獲取了哪些資源,明白頁面節(jié)點(diǎn)間的關(guān)系。狠方便。

使用搜索功能搜索數(shù)據(jù) 有寫網(wǎng)站的數(shù)據(jù)不是直接靜態(tài)的寫載html中的,現(xiàn)在很多都是動態(tài)的用ajax等技術(shù)從后端獲取,然后利用js渲染好節(jié)點(diǎn)數(shù)據(jù)。 所以怎樣知道自己想要的數(shù)據(jù)在哪個端口呢。

  • 在html中查看數(shù)據(jù)節(jié)點(diǎn)的命名方式。(通常會保持一致)
  • 利用搜索工具搜索出想要信息,排查。

關(guān)于數(shù)據(jù)定位

對于某些網(wǎng)站,他們的數(shù)據(jù)往往沒有那么直觀就能再html或者某個json接口中就直接找到,可能他們的數(shù)據(jù)格式不一樣。經(jīng)過了一定處理,比如四舍五入,或者統(tǒng)計計算(比如我碰到的東方財富網(wǎng)站)。這時候我們就需要對網(wǎng)站進(jìn)行分析了。要了解其內(nèi)部js是如何運(yùn)算數(shù)據(jù)的,以及最后得出結(jié)果。 這里講一個簡單的,對dom樹進(jìn)行監(jiān)控。這里檢測dom樹節(jié)點(diǎn)什么時候發(fā)生變化。

通過這樣再元素那對節(jié)點(diǎn)進(jìn)行監(jiān)控,當(dāng)節(jié)點(diǎn)改變時,就會debug:暫停

這樣就定位到了js如何變化

還有直接對js進(jìn)行斷點(diǎn)的,但是沒有這個好用。

分布式,多線程等技術(shù)

使用這些批量的爬蟲技術(shù),主要是為了提高效率,因為時間很重要,要在規(guī)定時間內(nèi)將數(shù)據(jù)又快又好的爬取出來。 - 我主要使用python里面的多線程,協(xié)程進(jìn)行爬取,具體做法 協(xié)程博客 - 注意爬取的速度, 太快反而會導(dǎo)致錯誤 - 使用偽裝

常用框架:scrapy

反爬蟲

這也很重要,對于爬蟲是不可或缺的。

分級層爬取,

盡量將數(shù)據(jù)存儲到本地,哪怕其中部分不是我最終需要的數(shù)據(jù),只要是中間過程的一步,在不影響整體速度的前提下,盡量將中間數(shù)據(jù)也存儲到本地。

本地數(shù)據(jù)的讀取速度是很快的,重要的是,減少目標(biāo)服務(wù)器的壓力。

確保數(shù)據(jù)整體的正確性

很多時候,我們并不能一次性就把握住某個接口的全部特性,那么我們需要盡量的多做測試,在擁有足夠多的數(shù)據(jù)樣本的情況下,去進(jìn)行判斷。

明白樣本和整體的意義。

總結(jié)

以上是生活随笔為你收集整理的爬虫 页面元素变化_爬虫 基本知识 萌新的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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