爬蟲 爬取多頁數據

最近在寫一個簡單的爬蟲,最開始使用的是BS4工具,可是後面接觸到xpath,以爲這個比較適合我哈哈.html

而後用xpath又從新寫了一遍,其中讓我困擾的仍是多頁爬取,ip總是被封.python

網上找了不少方法,大多數都是說要創建一個ip池,循環爬取多頁數據的時候,就換ip這樣就不會被封了.數據庫

而後代理ip有兩種,一個要付費比較穩定,畢竟要錢嘛,還有一個是有些網站能夠提供免費代理ip,可是隻有部分可用,要本身爬下來而後一個一個檢驗有效性再存入數據庫多線程

而後我瞭解到的是西刺代理ip是免費的,可是我在網上好像找不到它的官網了,多是換網址了,(哎,就算找到了,弄個代理ip感受也挺費時間的)工具

最後我分析了一下我要爬的網站,好像網站挺簡單的,只是一個靜態的html,而後會封我ip(哈哈我最開始寫的時候直接一個循環懟上去,致使頻繁訪問,被遠程主機認爲是ddos,而後拒絕服務了)網站

後面仍是用time.sleep(time)來限制了一下訪問速度,雖然我本意不是這樣嗚嗚嗚(被現實擊垮了,不得不屈服),而後多頁爬取還有一個問題就是速度太慢了,好比說我此次爬取的數據就有10000頁,線程

那直接爬的話速度將會很慢很慢,這時候就要用到多線程,雖然速度仍是受到了限制(python的GIL限制),可是也夠用了3d

而後中間出現了一點小插曲(episode,哈哈和我一塊兒背單詞),就是xpath的使用 ( .// 和 // ) .//表示在本層次查找 //表示從根元素開始查找,沒圖說勾八,上圖!!,咱先貼上要爬取頁面的源碼代理

 

 這裏咱們要爬的是tr裏面的內容,簡單分析了一下,直接上代碼!!!htm

 

 這裏解釋一下trs爲何從第一行開始,由於第一行不是咱們想要的數據,第一行是標題,咱們這裏用trs[1:]把它過濾掉了,這個 td = tr.xpath('//td'),

表示查找全部的td標籤,這麼寫實際上是有問題的,前面已經分析過了,就是這麼寫的話每次都是從根節點開始查找全部的td,觀察輸出結果也能夠發現,

每次的id都是同樣的,而其實這個代碼的意思也很明顯,就是每次從tr下面查找全部的td,因此應該這麼寫 td = tr.xpath('.//td')  .//表示從tr這一層開始查找

好啦 3 2 1 再見咯

相關文章
相關標籤/搜索