爬蟲抓取時的幾個小細節 快取 編碼 解析

2021-07-03 21:55:04 字數 4030 閱讀 1774

一:網頁更新

我們知道,一般網頁中的資訊是不斷翻新的,這也要求我們定期的去抓這些新資訊,但是這個「定期」該怎麼理解,也就是多長時間需要

抓一次該頁面,其實這個定期也就是頁面快取時間,在頁面的快取時間內我們再次抓取該網頁是沒有必要的,反而給人家伺服器造成壓力。

就比如說我要抓取首頁,首先清空頁面快取,

從last-modified到expires,我們可以看到,的快取時間是2分鐘,而且我還能看到當前的伺服器時間date,如果我再次

重新整理頁面的話,這裡的date將會變成下圖中 if-modified-since,然後傳送給伺服器,判斷瀏覽器的快取有沒有過期?

最後伺服器發現if-modified-since >= last-modifined的時間,伺服器也就返回304了,不過發現這cookie資訊真是賊多啊。。。

在實際開發中,如果在知道**快取策略的情況下,我們可以讓爬蟲2min爬一次就好了,當然這些都是可以由資料團隊來配置維護了,

好了,下面我們用爬蟲模擬一下。

//如果伺服器返回狀態是200,則認為網頁已更新,記得當時的伺服器時間

當前伺服器的狀態碼:

二:網頁編碼的問題

有時候我們已經抓取到網頁了,準備去解析的時候,***的全部是亂碼,真是操蛋,比如下面這樣,

或許我們依稀的記得在html的meta中有乙個叫做charset的屬性,裡面記錄的就是編碼方式,還有乙個要點就是

response.characterset這個屬性中同樣也記錄了編碼方式,下面我們再來試試看。

艹,居然還是亂碼,蛋疼了,這次需要到官網上面去看一看,到底http頭資訊裡面都互動了些什麼,憑什麼瀏覽器能正常顯示,

爬蟲爬過來的就不行。

檢視了http頭資訊,終於我們知道了,瀏覽器說我可以解析gzip,deflate,sdch這三種壓縮方式,伺服器傳送的是gzip壓縮,到這裡

我們也應該知道了常用的web效能優化。

三:網頁解析

既然經過千辛萬苦拿到了網頁,下乙個就要解析了,當然正則匹配是個好方法,畢竟工作量還是比較大的,可能業界也比較推崇

htmlagilitypack這個解析工具,能夠將html解析成xml,然後可以用xpath去提取指定的內容,大大提高了開發速度,效能也

不賴,畢竟agility也就是敏捷的意思,關於xpath的內容,大家看懂w3cschool的這兩張圖就ok了。

//提取title

55var title = document.documentnode.selectsinglenode("

//title

").innertext;

5657

//提取keywords

58var keywords = document.documentnode.selectsinglenode("

//meta[@name='keywords']

").attributes["

content

"].value;59}

60}61 }

好了,打完收工,睡覺。。。

新站優化的幾個小細節

關於網www.cppcns.com站建設初期或者是前期策劃時候需要注意的一些事情。站長小夥伴一般都會忽程式設計客棧略一些 小細節,但是正式因為這些小的細節,才會導致小夥伴的 權重得不到提公升,自然而然流量就沒有了。那麼小貓今天就來給大家說一說這些小細節,希望對大家有 所幫助,小貓每日白話,走起!td...

記錄一些爬蟲的小細節

1.使用beautifulsoup初始化用requests獲取到的html文字時,有時候會出現亂碼現象,只需要指定response.encoding utf 8 即可 2.有時候使用selenium定位元素時,定位 沒有問題,但是提示定位不到,這是因為頁面中存在多個iframe標籤,相當於多個子頁面...

Scrapy框架抓取豆瓣電影的小爬蟲學習日記(三)

獲取到影片資訊之後,下一步就是要把獲取到的資訊進行儲存了。網上很多的案例都是儲存成json格式,這裡我想用mysql伺服器來儲存。1 首先安裝好mysql資料庫,建好filminfo表和字段。2 在items.py檔案中新增你需要儲存到資料庫中的資訊,定義相對應的class,生成item類物件。cl...