爬蟲 爬取多頁資料

2022-06-05 07:06:09 字數 1178 閱讀 1432

最近在寫乙個簡單的爬蟲,最開始使用的是bs4工具,但是後面接觸到xpath,覺得這個比較適合我哈哈.

然後用xpath又重新寫了一遍,其中讓我困擾的還是多頁爬取,ip老是被封.

網上找了很多方法,大多數都是說要建立乙個ip池,迴圈爬取多頁資料的時候,就換ip這樣就不會被封了.

然後**ip有兩種,乙個要付費比較穩定,畢竟要錢嘛,還有乙個是有些**可以提供免費**ip,但是只有部分可用,要自己爬下來然後乙個乙個檢驗有效性再存入資料庫

然後我了解到的是西刺**ip是免費的,但是我在網上好像找不到它的官網了,可能是換**了,(哎,就算找到了,弄個**ip感覺也挺費時間的)

最後我分析了一下我要爬的**,好像**挺簡單的,只是乙個靜態的html,然後會封我ip(哈哈我最開始寫的時候直接乙個迴圈懟上去,導致頻繁訪問,被遠端主機認為是ddos,然後拒絕服務了)

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

那直接爬的話速度將會很慢很慢,這時候就要用到多執行緒,雖然速度還是受到了限制(python的gil限制),但是也夠用了

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

這裡我們要爬的是tr裡面的內容,簡單分析了一下,直接上**!!!

這裡解釋一下trs為什麼從第一行開始,因為第一行不是我們想要的資料,第一行是標題,我們這裡用trs[1:]把它過濾掉了,這個 td = tr.xpath('//td'),

表示查詢所有的td標籤,這麼寫其實是有問題的,前面已經分析過了,就是這麼寫的話每次都是從根節點開始查詢所有的td,觀察輸出結果也可以發現,

每次的id都是一樣的,而其實這個**的意思也很明顯,就是每次從tr下面查詢所有的td,所以應該這麼寫 td = tr.xpath('.//td')  .//表示從tr這一層開始查詢

好啦 3 2 1 再見咯

爬蟲(5)爬取多頁資料

我們點開其他年份的gdp資料時,會發現 的變化只有後面的數字變成了相應的年份,所以我們可以通過for迴圈來實現對多頁資料的爬取 from selenium import webdriver from bs4 import beautifulsoup import csv driver webdriv...

Python Scrapy多頁資料爬取實現過程解析

1.先指定通用模板 url 程式設計客棧 d 通用的url模板 pagenum 1 2.對parse方法遞迴處理 parse第一次呼叫表示的是用來解析第一頁對應頁面中的資料 對後面的頁碼的資料要進行手動傳送 if self.pagenum 5 self.pagenum 1 new url forma...

爬取網頁資料 插敘 爬取網頁資料,給寶寶取個好名字

前言 應用例項 匯入模組import requestsfrom bs4 import beautifulsoup 填寫頭請求,包括爬取網頁 headers result 暫定爬取9頁名字for i in range 1,10 url str i html r requests.get url,hea...