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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫的技术问题

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫的技术问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

爬蟲的技術問題
一、JS加密如何突破
熟練掌握 Chrome 的開發者工具的各個功能,Elements,Network,Source
認真觀察,善于思考,Network 查看加載流程,找可疑的 xhr 請求,設置 xhr 斷點,通過 CallStack 回溯 js 執行過程,邊回溯便查看上下文代碼。能讀懂 js 代碼,知道 js 的相關知識,比如 js 里面的 window 變量
以上是通過 debug js 找到 js 加密解密的代碼,然后通過 Python 重新實現,這個過程很長,可能消耗你幾天的時間,一旦網站改變一下 js 算法你的 Python 實現就不能使用了。
用 selenium 可簡單突破,并且網站隨便改都無所謂。唯一遺憾的是,selenium 的運行效率較差。但是,作為一個能用 js 加密來保護數據的網站,單價的運行效率應該足以滿足網站的訪問頻率限制。這時候,更多的思考是如何增加資源(IP、賬號)來提高抓取效率
二、多線程、協程、多進程的選擇
爬蟲是 IO 密集型任務,大部分時間花在網絡訪問上,所以多進程不適合網絡爬蟲,而多線程、異步 IO 協程更適合,而異步 IO 是最適合的,它相比多線程,協程間的切換代價更小,我們提倡使用異步 IO 而非多線程。異步 IO 的模塊主要是:aysncio,aiohttp,aiomysql等
網頁爬下來后從中提取想要的數據是 CPU 密集型的,這時候可以用多線程并步提取。
我們推薦的爬蟲策略是,爬蟲只管爬,把爬下來的 html 保存起來,存到數據庫。然后單獨寫提取數據的提取器。好處是,提取不影響爬取,爬的效率更高,并且提取程序可以隨時修改,有新的提取需求時不需要重新抓取。比如,最初寫爬蟲時只想抓取網頁中的兩項數據,運行一段時間后,發現另外 3 項數據也很有用,如果保存了 html,只需要改改提取器重新跑一遍就好了。
三、如果想要保留加粗或者圖片原始位置,只能通過挖掘規律再寫正則表達式來針對性處理嗎?
網頁數據提取的主要兩種方法:正則表達式,xpath。通過 xpath 可以獲取某個 html 標簽節點。比如,一篇 blog 網頁,它的主體內容都在某個標簽里面,可能是某個 div。用 xpath 得到這個 div,轉換為 html,就是包含了格式及其圖片的部分,你保存這段 html 代碼而純文本就好了。

四、爬蟲的增量爬取、斷點續爬、去重等分享一下你的經驗
通過網址池的概念去管理所有的 url
增量爬取就是補充下載已經下載過的,讓網址池記住那些已經下載過的 url
斷點續爬,就是場次還沒有爬取的 url 這次接著爬,還是讓網址池記住那些還沒被爬取的 url
爬蟲的去重,讓網址池記錄 url 的狀態以避免重復爬取。
五、爬蟲的部署問題,在公司是不是分布式爬蟲系統比較多涉及部署問題
爬蟲的部署,不一定是分布式的。大規模的爬蟲,突破了目的網站限制的爬蟲才會涉及到分布式,分布式的好處是抓取速度提高,但是管理會比較復雜。

六、網頁的自動解析
這個話題就包含很多子任務了:怎么自動抽取文章的內容,如何處理各種各樣的時間格式,怎樣處理翻頁

文章內容的提取,基本的是每種網頁建立一個提取模板(正則表達式),好處是提取精準,壞處是工作量大,一旦稍微改版就失敗。通過算法建立單一提取程序,基本上都可以提取,但是可能會有寫雜質,比如文末的相關閱讀。好處是,一勞永逸,不受改版限制
時間的提取,除了正則表達式之外似乎沒有特別有效的方法。
翻頁的話,如果只是抓取,如何在提取內容時要把多頁內容合并成一個網頁,那就需要特別處理。
七、爬新聞類的網站時,如何做好同一個新聞,各網站相互轉載,爬取時文本去重
比較著名的算法是,Google 的 simhash,但具體實踐中比較復雜。網傳百度的做法是把文章的最長一句話(或多句)做 hash,這個 hash 值就是文章唯一性代表(指紋),這個方法準確率很高,但是召回率比較低,一旦這最長的幾句話改一個字就不能召回;我改進了該方法,對 n 句 最長的話分別做 hash,一個文章由 n 個指紋(例如人的是個指頭指紋都不一樣)確定唯一性。準確率和召回率都還不錯。

八、異步爬蟲的涉及
一個好的 url 管理策略,參考這兩篇文章:https://www.yuanrenxue.com/crawler/news-crawler-urlpool.html
網址池是一個“生產者-消費者”模型,爬蟲從中取出 url 去下載,下載的 html 中提取新的 url 放入池中,告訴 url 池剛取出的 url 是否下載成功;再從池中取出 url 進行 下載 url 是否下載成功。url 池是核心部件,它記錄 url 的不同狀態:
(a) 下載成功
(b) 下載失敗 n 次
(c) 正在下載
每次往池子添加 url 時都要檢查 url 在池中的狀態,避免重復下載
一個好的異步協程管理策略,可以參考下面這個鏈接https://www.yuanrenxue.com/crawler/news-crawler-asyncio.html
每次從 urlpool 中提取 n 個 url,生成 n 個異步下載的協程,通過一個變量記錄協程的個數(也就是正在下載網頁的個數)
爬蟲的泛問題
一、爬蟲的法律問題
最好不要去抓涉及到個人隱私的信息,比如個人的電話、地址、聯系方式和個人征信等,還有就是涉及到一些版權的信息,比如圖片。這些抓了之后,你用于商業之后就會犯法,或者拿這些數據做一些違法的行為都會被抓的。
去了解下刑法的 285 條 和 286 條,這兩個都是和破壞計算機有關的。比如逆行,抓app的話,就需要反編譯,這個一旦被舉證,肯定會坐牢。沒有抓你是沒有舉報你而已。
私下售賣數據也需要小心,因為別人買了你的數據,你不知道別人是拿來干什么的,用來別的非法的用途的都不要去賣給他。
最近國家也新出了一個爬蟲規定,可以看看。
二、初學爬蟲入門
學 requests 庫,并會熟用,就可以說是簡單地入門到爬蟲了
在爬取的過程中你就會想到要解析,就會去查看有哪些解析方法,就有正則和 xpath,你就會又學這兩個東西,在學習的過程中你就不會感覺到很枯燥。
把數據解析出來了,就需要存儲數據,可以直接寫到文本,可以寫到數據庫,這就會又去學習數據庫相關知識,最后就能存儲數據到數據庫了。
最后你是能爬能解析能存了,但發現爬取的速度太慢了,有時候還會遇到錯誤,這是遇到反爬,你就又要去學習和反爬相關的知識,或者使用別的來提高爬取速度。
就是從一點一點地去做,在做的過程中,遇到問題了再來去學習,這樣的話,你的收獲感是最大的,而且你對他的印象也是最深刻的。
三、爬蟲的后續發展路徑
往爬蟲高級發展,就是抓取過市面上 80% 的 app和網站,對每一個 app 或者網站都懂它的反爬,都知道相應的爬取策略,都有自己的方法論。而且能夠日抓取數量到千萬級以上,這種爬蟲人才是很奇缺的。
可以去做自由職業,可以選擇接外包,但是不要去接 一兩千或者幾百的,要接就只接萬塊以上的,要不改需求的時候就會折騰掉很多時間,得不償失。怎么接呢?首先自己需要抓過市面上主流的大多數app,比如美團、大眾點評,京東、淘寶、脈脈等,這些你都抓過,都已經把程序給寫好了的,然后有人找你的時候就可以直接給數據給他看就可以交易了。
被動收入,做數據抽取和數據整合。數據抽取就是在一堆凌亂的數據中把需要的數據給提取出來。而數據整合就是把散放在各個不同網站上的相同類型的數據整合起來。比如:做微博的數據整合,早期沒有記者這些東西實時跟蹤明星的動態,但是一些路人在看見某個明星的時候就會發個照片或者視頻到微博上,你就可以爬取這些數據,把某一個明星的動態整合起來凡在你的網站上,多人搜的時候就會有流量,有流量就會有收入。但是現在去做會涉及到圖片版權的問題。
四、數據整合,涉及到 n 個網站的數據處理大致是什么形式的
這個沒有辦法完全使用技術實現,因為現階段的自然語言處理技術還不是很好。
我自己的是通過機器來爬取網站的大量數據,然后自己再人工去篩選數據,這個需要花費大量的時間的,然后就把幾個不同網頁的數據自己整合成一段話之類的。

五、爬蟲的簡歷應該如何寫才不會石沉大海
簡歷不要寫那種我會什么,會抓取什么,會什么策略,需要帶上數字去描述,比如三天破解淘寶的 JS 加密,能設計出日抓千萬級數據的爬蟲架構,三天時間能夠抓取淘寶1000網頁
注意公司的招聘要求,別人上要求能抓取的網站,如果自己也能抓取的話,就必須要在簡歷上寫出來,反正別人需要什么就盡可能多點寫。
簡歷還需要有動詞,要善于使用動詞,比如說擅長、設計、主抓、什么負責人之類的。
六、爬蟲進階
抓取數據量級變大,就是往日抓千萬級、過億的數據上去抓。這個時候,你就會發現你之前用的東西都沒有用了。因為之前你抓數據就一天抓個幾萬,覺得很容易,但需要你抓千萬級的時候,這個時候再按之前那種抓法,就會發現自己的硬盤會爆,而且網絡請求也會有大量的問題。
這里就需要重新設計爬蟲架構,這時就會有自己的設計理念在里面,就會涉及到任務的調度、分發,url 的存儲等等,而且還需要很用心處理 http code,比如遇到 500 怎么辦,遇到 400怎么辦,這些都需要處理,而且還需要處理一些異常,不能讓爬蟲停止,考慮的東西都變多了好幾倍。
在上升階段,不需要去使用 scrapy 框架,因為很多原理自己都不懂,直接使用框架的話,就會少碰到很多細節問題,但是如果你熟悉 scrapy 框架的源代碼的話,這是可以使用的,因為原理都懂了,不需要自己再造輪子了也行,不懂得話就需要自己實現一個,要不然工作三四年以后,再去應聘的話都需要會自己寫一個爬蟲框架,到時候什么都不會就慘了。
另一個進階方向就是逆向, JS 逆向和 app 逆向,這些都是進階必學的內容。
最后這兩個都搞定了,就會遇到另外一些問題,比如需要考慮大規模的賬號和 IP,這些也都是需要考慮的。當你擁有這兩個東西的時候,就不會怕什么逆向之類的,因為都不需要了。
七、IP 代理池的抓取,app 數據的抓取
IP 代理池的話,肯定是需要付錢的,一般都使用 adsl,這個成本低。或者使用付費代理,這樣才可以穩定去抓取。
app 抓取的話,如果不會逆向的話可以去使用一些自動化測試工具,比如網易的 arits(可能拼錯了),或者 appium 都可以。這些自動化測試工具最常用就是群控,當有足夠的 ip 和賬號的時候,就直接使用這個就行了,不需要再花費成本去逆向破解。
八、怎樣算一個好爬蟲
不觸犯你抓取網站的屏蔽規則就是一個好爬蟲。 當你觸犯了,比如抓網站的時候需要了驗證碼,這都是因為你觸犯了別人的屏蔽規則,賬號和 ip 都被監控起來了,這樣子就不是一個好的爬蟲。
好的爬蟲就是盡量減少觸犯網站的屏蔽規則,要像一個人一樣正常地爬取,這樣就可以減少很多爬取時需要破解的麻煩。
我現在在爬數據之前就會先測試抓取極限,比如測試下 100s 內能訪問多少次,如果到了 80 次就被封了,其實你有可能在第 70 次訪問的時候就開始被監控了,這個時候為了讓賬號活得更久,我們就應該設置 100s 內爬取 40 次,為什么是 40 次呢,因為如果網站在某一時候遭到大量的爬蟲的時候,會提高對爬蟲的屏蔽,比如原來讓你 100s 訪問 80次,他就會有可能 100s 只能訪問 60次 或者更高來避免爬蟲,這時候我們如果設置次數太高的話,肯定會遭殃,但是設置少于他的抓取極限一倍時就不太可能被封。
有時候一些公司會搞爬蟲暗戰,就會在晚上凌晨的時候,想搞一下競爭對手,讓對手的爬蟲都死掉,就有可能會去高頻次地去抓取,盡而讓他們提高下對爬蟲的屏蔽,這樣子競爭對手的爬取數據就會死掉。
9. 通過爬蟲賺錢的一些套路
數據提煉型,比如做知乎粉絲、點贊數等排行榜,他是通過讓別人關注公眾號來回復知乎 id 返回 他是 大v 、小v 等等這些信息,這樣子可以獲得一些精準粉絲,以后就可以做流量生意。我們還可以去做抖音、微博、網易云之類的排行耪。
數據抽取型,通過爬取特定的數據來展示給特定的人群。比如前面所說的爬取微博上一些明星的動態,這些動態不是明星自己發的,而是粉絲在看見明星的時候發在微博上的,然后就可以爬取這些數據來展示給他們的粉絲看,流量也是很大的。
數據結構化,機構化一些沒有版權的東西,比如公開的商標,專利等等。
10. 自己學習過程中的一些經驗
主要就是兩個,第一,要沉下心來,第二,要傻瓜化,就是沒有那種討巧的方法
工作的前三年需要將大部分的時間投入到工作上,投入到學習上,需要多學。還有傻瓜化,就是有些程序看不懂,就一行一行抄下來,再不懂,就一行行去打斷點,就慢慢來。
編程的基礎是絕對重要的,編程基礎決定你編程的質量,基礎不好,寫的代碼就有可能會有很多 bug。需要學習數據結構。
英文,英文這個很重要,因為很多文檔或者先進的技術資料都是英文的,所以需要看得懂。可以每天堅持去看一篇新聞報告,把不懂得新聞單詞都給查下來,直到看懂,堅持一年之后,就會覺得都很容易了。這樣子就可以很輕松和國外得技術人員溝通了。
11.反爬策略
改refere,改ua,cookie,注定訪問 url 的順序,還有就是需要先訪問圖片才可以去訪問某個 url.
如果需要更換 IP,可以去買個智能路由器,然后自己實現下它的 adsl 拔號,這樣也可以更換 ip,還有因為這些 IP 都是民用的,被封的概率也少一點。
改 refer,比如將它改成 百度,因為有些網站如果是直接進去的話,是需要登陸的,但是如果是先從百度搜索,再點擊結果進去的,就不需要登陸,這是網站為了得到流量而做的做法,所以改了這個可以避免一些網站登陸。
改 cdn,還是改 dns,這個還是不太懂,
查看 robot 協議,有的網站會將整個網站的 html 網頁都放在 robot 協議上,這樣子我們直接訪問這個,就可以節省很多請求,比如一些翻頁反列表之類的。

總結

以上是生活随笔為你收集整理的爬虫的技术问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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