Python批量爬取資料與去重方法

2021-09-17 19:59:27 字數 2025 閱讀 3568

在進行英文取名專案對資料的爬取與分析中,經常會對已經儲存的批量資料去獲取更多有效的資料,這個時候我們需要考慮去重複問題,以及在高頻率訪問**導致連線超時中斷等問題。

設定緩衝區:當我們進行批量處理時,也許會發現在過萬條資料裡面存在些許重複項資料,這個時候如果我們針對這些資料繼續去獲取更多的資料時,依然會得到無效的重複項資料,同時考慮到程式容易中斷問題,在對資料進行 「a」 (追加)操作時,經常會導致原本獲取的大量資料又得重新再次爬取,所以本人想到如下方法:

1.1在爬蟲的時候使用異常處理方法

利用try-except方法:

def

main()

: url =

''+str

(moviesname)

try:

print

("正在連線中..."

) data = requests.get(url, headers=headers, proxies=proxy_temp)

.text

#將獲取的資料寫道到csv檔案中,呼叫write1()函式進行寫入

write1(enname,moviesname,plot)

#將操作使用過的moviesname寫入緩衝區,作為該行資料已處理過的記錄

write_redis(moviesname)

except

:#程式連線失敗,執行異常處理,將無法連線的資料寫入到另乙個csv檔案中作為記錄

print

("該電影名無法得到劇情資料..."

) write2(enname,moviesname)

#將操作使用過的moviesname寫入緩衝區,作為該行資料已處理過的記錄

write_redis(moviesname)

ps(該**部分只貼入了部分**,並不完整,主要用於體現try-except方法的使用)

1.2設定緩衝區

建立乙個新的檔案用來記錄操作過的資料,在每次迭代執行主函式時,首先進行讀取該檔案,如果迭代獲取的資料在該檔案中,則跳過主函式的執行,如若不在其中,則證明該行資料沒有被執行使用過,則呼叫主函式拿到該資料的相關資料資訊。

def

write_redis()

:with

open

('new_redis.txt'

,'a'

, newline=

'', encoding=

'utf-8'

)as f:

f.write(moviesname)

f.write(

'\n'

)def

main()

: df = pd.read_csv(

'all_movie_1.10.csv'

,encoding=

'utf-8'

,sep=

',',engine=

'python'

)for i in df.index:

row = df.loc[i]

moviesname = row[

'moviesname'

] enname = row[

'enname'

]with

open

('new_redis.txt'

,'r'

,encoding=

'utf-8'

)as f:

#讀取該txt檔案,返回物件給data

data = f.readlines(

)#如果該條資料moviesname不在該物件中,則執行主函式

if moviesname not

in data:

main(moviesname,enname)

該方法可成功避免程式因為各種原因導致中斷,而需要重新爬取批量資料的操作。如果程式中斷,依然可以繼續執行**,同時繼續在csv檔案後追加新的資料,而避免重複項的存入。

Python資料爬取

二.scrapy爬蟲框架 資料 網路資料採集模型 第三方庫實現爬取 pyspider爬蟲框架 scrapy爬蟲框架 安裝scrapy 配置scrapy環境變數 建立scrapy專案的命令 建立spider 使用python指令碼執行命令列啟動爬蟲 from scrapy.cmdline import...

Python爬取疫情資料

實現 輸出結果 import requests 請求庫 import pandas as pd 日期 today time.strftime y m d time.localtime format y 年 m 月 d 日 url 請求頭 headers 傳送請求 response requests....

python入門 資料爬取

很多人剛開始學習python的時候,都會聽到python能做爬蟲 資料分析等,但是為什麼要用它來做爬蟲有所不知,今天我們就來好好聊聊。做爬蟲的需求一般都是出自於實際應用的需要,比如某某 上有你喜歡的mm,你想把這些高畫質 儲存到本地。比如做安全掃瞄時,一般 都會封ip,那這個時候就需要在 爬取多個 ...