對于一個專案,我正在使用 python 提取酒店評論。我有一個包含 100 多家酒店的串列,我從每家酒店中提取了 1.500 條評論。問題是有些酒店沒有那么多評論。發生的情況是,當未達到 1.500 時,回圈停止并顯示錯誤。
這是我的代碼:
# The number of reviews to obtain per hotel
reviewsToGet = 1500
# Loop for all hotels
for index, row in hotelsToScrap.iterrows():
# Present feedback on which hotel is being processed
print("Processing hotel", index)
# Reset counter per hotel
reviewsExtracted = 0
# Loop until it extracts the pre-defined number of reviews
while reviewsExtracted<reviewsToGet:
# Define URL to use based on the number of reviews extracted so far
urlToUse = row['URL']
if reviewsExtracted>0:
repText = "-Reviews-or" str(reviewsExtracted) "-"
urlToUse = urlToUse.replace("-Reviews-",repText)
# Open and read the web page content
soup = openPageReadHTML(urlToUse)
# Process web page
hotelReviews = processPage(soup, index, hotelReviews)
# Update counter
reviewsExtracted = reviewsExtracted 5
# Present feedback on the number of extracted reviews
print("Extracted ",reviewsExtracted,"/",reviewsToGet)
# Save the extracted reviews data frame to an Excel file
hotelReviews.to_excel("ExtractedReviewsComplete.xlsx")
即使未達到 1.500,我該如何進行提取?
uj5u.com熱心網友回復:
在不知道確切錯誤的情況下很難判斷,但我想當 while 回圈條件為真時,即reviewsExtracted小于reviewsToGet并且實際上沒有更多評論時,您的某些代碼仍在嘗試提取評論,但是有實際上沒有更多的評論!這里:
repText = "-Reviews-or" str(reviewsExtracted) "-"
urlToUse = urlToUse.replace("-Reviews-",repText)
您只需urlToUse使用reviewsExtracted可能不在網站上的值來設定新 URL 。
所以我會再添加一個條件來首先檢查在提取之前是否有要提取的評論,或者使用try并except捕獲確切的錯誤,我認為它發生在這一行:
soup = openPageReadHTML(urlToUse)
uj5u.com熱心網友回復:
從您的帖子中,我認為 1500 數字是上限,例如。“這是我想為每家酒店獲得的最大評論數量。如果一家酒店的評論少于 1500 條,請獲取所有評論,然后繼續前進。”
我建議將您的方法從依賴最多 1500 條評論作為條件轉變為將其用作指示何時停止并前往下一家酒店的信號。
但是,如果您只想讓當前的實作運行,請按照其他一些評論者所說的去做:實作例外處理,以便您的流程在遇到錯誤時可以繼續。
示例,使用您的代碼:
reviewsToGet = 1500
# Loop for all hotels
for index, row in hotelsToScrap.iterrows():
print("Processing hotel", index)
reviewsExtracted = 0
try:
# Loop until it extracts the pre-defined number of reviews
while reviewsExtracted<reviewsToGet:
# Define URL to use based on the number of reviews extracted so far
urlToUse = row['URL']
if reviewsExtracted>0:
repText = "-Reviews-or" str(reviewsExtracted) "-"
urlToUse = urlToUse.replace("-Reviews-",repText)
# Open and read the web page content
soup = openPageReadHTML(urlToUse)
# Process web page
hotelReviews = processPage(soup, index, hotelReviews)
# Update counter
reviewsExtracted = reviewsExtracted 5
# Present feedback on the number of extracted reviews
print("Extracted ",reviewsExtracted,"/",reviewsToGet)
except Exception as err:
print("[ ] Exception encountered! Most likely because hotel has too few reviews, but check stack trace. Continuing anyways.")
pass
# Save the extracted reviews data frame to an Excel file
hotelReviews.to_excel("ExtractedReviewsComplete.xlsx")
uj5u.com熱心網友回復:
最簡單的方法是while在try-except{}塊內回圈,如下所示:
# The number of reviews to obtain per hotel
reviewsToGet = 1500
# Loop for all hotels
for index, row in hotelsToScrap.iterrows():
# Present feedback on which hotel is being processed
print("Processing hotel", index)
# Reset counter per hotel
reviewsExtracted = 0
# Loop until it extracts the pre-defined number of reviews
while reviewsExtracted<reviewsToGet:
try:
# Define URL to use based on the number of reviews extracted so far
urlToUse = row['URL']
if reviewsExtracted>0:
repText = "-Reviews-or" str(reviewsExtracted) "-"
urlToUse = urlToUse.replace("-Reviews-",repText)
# Open and read the web page content
soup = openPageReadHTML(urlToUse)
# Process web page
hotelReviews = processPage(soup, index, hotelReviews)
# Update counter
reviewsExtracted = reviewsExtracted 5
# Present feedback on the number of extracted reviews
print("Extracted ",reviewsExtracted,"/",reviewsToGet)
except:
continue
# Save the extracted reviews data frame to an Excel file
hotelReviews.to_excel("ExtractedReviewsComplete.xlsx")
PS:您必須只捕獲要避免的必需例外,而不是捕獲原始例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392391.html
