我有一个网络刮板,可刮刮一页评论,但似乎无法使刮板进入第二个网页,因此最多刮刮10页。
我尝试使用发现以下可识别属性的以下类进行for循环:class =“ BVRRSelectedPageNumber”:i 然后我与i + 1循环
但是我似乎无法获得正确的代码。
我很想获得关于我应该从此代码开头的提示或建议,谢谢。
import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen as uReq
import pandas as pd
import csv
def webScraper():
for page in range(10):
url = "https://www.marriott.com/hotels/hotel-reviews/amsnt-amsterdam-marriott-hotel"
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
general_data = soup.find_all(class_='bvseo-review')
i = 1
first = general_data[i]
i+=1
span = []
description = []
rating = []
auteur = []
for item in general_data:
span.append(item.find_all('span'))
description.append(item.find_all('span', attrs={'itemprop':'description'}))
rating.append(item.find_all('span', attrs={'itemprop':'ratingValue'}))
auteur.append(item.find_all('span', attrs={'itemprop':'author'}))
pagereviews = pd.DataFrame({
"description":description,
"ratingValue":rating,
"author":auteur
})
return pagereviews
webScraper()
预期结果将是刮取10页评论。
答案 0 :(得分:0)
我不完全理解您的问题。但是乍一看,有很多事情看起来很麻烦:
首先,我们遇到的问题是,您将名称page
用作循环变量,但还在循环内为其分配了一个值。这是不好的编码,并导致意外的行为。
第二个明显的问题是循环的每次迭代中请求url都相同。这导致每次迭代都相同,这很可能是问题的一个根源。
以下构造无用:
i = 1
first = general_data[i]
i+=1
由于这是在for循环中发生的,所以最后一行永远不会有任何效果,并且{{1}的每次迭代中,i
的值将在1
中计算为first = general_data[i]
}}-环。您为什么不只写for
? (很可能您实际上可能想要first = general_data[1]
!)
first = general_data[0]
在循环的每次迭代中都会被覆盖。这也使整个for循环无效,因为将仅返回最后一次迭代的值。您可能想看看熊猫pagereviews
方法;-)