在進行英文取名專案對資料的爬取與分析中,經常會對已經儲存的批量資料去獲取更多有效的資料,這個時候我們需要考慮去重複問題,以及在高頻率訪問**導致連線超時中斷等問題。
設定緩衝區:當我們進行批量處理時,也許會發現在過萬條資料裡面存在些許重複項資料,這個時候如果我們針對這些資料繼續去獲取更多的資料時,依然會得到無效的重複項資料,同時考慮到程式容易中斷問題,在對資料進行 「a」 (追加)操作時,經常會導致原本獲取的大量資料又得重新再次爬取,所以本人想到如下方法:
1.1在爬蟲的時候使用異常處理方法
利用try-except方法:
ps(該**部分只貼入了部分**,並不完整,主要用於體現try-except方法的使用)def
main()
: url =
''+str
(moviesname)
try:
("正在連線中..."
) data = requests.get(url, headers=headers, proxies=proxy_temp)
.text
#將獲取的資料寫道到csv檔案中,呼叫write1()函式進行寫入
write1(enname,moviesname,plot)
#將操作使用過的moviesname寫入緩衝區,作為該行資料已處理過的記錄
write_redis(moviesname)
except
:#程式連線失敗,執行異常處理,將無法連線的資料寫入到另乙個csv檔案中作為記錄
("該電影名無法得到劇情資料..."
) write2(enname,moviesname)
#將操作使用過的moviesname寫入緩衝區,作為該行資料已處理過的記錄
write_redis(moviesname)
1.2設定緩衝區
建立乙個新的檔案用來記錄操作過的資料,在每次迭代執行主函式時,首先進行讀取該檔案,如果迭代獲取的資料在該檔案中,則跳過主函式的執行,如若不在其中,則證明該行資料沒有被執行使用過,則呼叫主函式拿到該資料的相關資料資訊。
該方法可成功避免程式因為各種原因導致中斷,而需要重新爬取批量資料的操作。如果程式中斷,依然可以繼續執行**,同時繼續在csv檔案後追加新的資料,而避免重複項的存入。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)
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,那這個時候就需要在 爬取多個 ...