Python 我想从Trustpilot评论中获取用户和位置信息

Python 我想从Trustpilot评论中获取用户和位置信息,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我有一个现成的代码可以从Trustpilot获取信息。我成功地抓取了所有页面的评论、标题、时间戳和排名信息。我还想抓取审阅者的详细信息和位置信息 我已经尝试添加消费者信息变量和用户信息变量。但它不起作用。 " 导入请求 从bs4导入BeautifulSoup作为bs 导入json 输入数学 作为pd进口熊猫 def getInfo(url): res=requests.get(url) 汤=bs(res.content,'lxml') data=json.load(soup.select_one

我有一个现成的代码可以从Trustpilot获取信息。我成功地抓取了所有页面的评论、标题、时间戳和排名信息。我还想抓取审阅者的详细信息和位置信息

我已经尝试添加消费者信息变量和用户信息变量。但它不起作用。 "

导入请求
从bs4导入BeautifulSoup作为bs
导入json
输入数学
作为pd进口熊猫
def getInfo(url):
res=requests.get(url)
汤=bs(res.content,'lxml')
data=json.load(soup.select_one('[type=“application/ld+json”]')。text.strip()[:-1])[0]
返回数据
def附加项(数据):
结果=[]
对于数据['review']中的项目:
回顾={
“标题”:项目[“标题”],
“排名”:项目['reviewRating']['ratingValue'],
“审阅”:项['reviewBody'],
“ReviewDate”:项['datePublished']
}
结果。追加(审阅)
返回结果
url='1〕https://uk.trustpilot.com/review/instagram.com?page={}'
结果=[]
data=getInfo(url.format(1))
结果.追加(附加项(数据))
totalReviews=int(数据['Aggregating']['reviewCount']
ReviewPerPage=len(数据['review'])
totalPages=math.ceil(totalReviews/ReviewPerPage)
如果totalPages>1:
对于范围内的页面(2,totalPages+1):
data=getInfo(url.format(第页))
结果.追加(附加项(数据))
最终=[结果中的项目对应结果中的项目]
df=pd.数据帧(最终)
df.head()
"

我想获取用户和位置信息<下面是我添加用户时遇到的错误。

<ipython-input-11-91758e06aa39> in addItems(data)
     17         review = {    
     18                   'Headline': item['headline'] ,
---> 19                   'User': item['user'] ,
     20                   'Ranking': item['reviewRating']['ratingValue'],
     21                   'Review': item['reviewBody'],

KeyError: 'user'
附加项(数据)
17审查={
18“标题”:项目[“标题”],
--->19“用户”:项[“用户”],
20“排名”:项目['reviewRating']['ratingValue'],
21“审查”:项目[“审查主体”],
KeyError:'用户'

项目字典不包含
用户
键,它有
“作者”:{
“@type”:“Person”,
“姓名”:“迈克·克罗克”,
“url”:”https://uk.trustpilot.com/users/5d5ef7c9e427cd04ec0804db',
'图像':'https://user-images.trustpilot.com/5d5ef7c9e427cd04ec0804db/73x73.png'
}
,因此,如果要获取用户位置,请更改
附加项(数据)
函数

Ex.

def addItems(data):
    result = []
    for item in data['review']:
        user_location = None
        url = item['author']['url']
        try:
            user_location = bs(requests.get(url).content, "lxml").find('div',\
                    {'class':'user-summary-overview'}).find("div",\ 
                    {'class':'user-summary-location'}).text.strip()
        except Exception as e:
            pass
        review = {
                  'Headline': item['headline'] ,
                  'Ranking': item['reviewRating']['ratingValue'],
                  'Review': item['reviewBody'],
                  'ReviewDate': item['datePublished'],
                   'User' : item['author']['name'],
                   'Location' : user_location
                }
        result.append(review)
    return result

项目字典不包含
user
键,它有
“作者”:{
“@type”:“Person”,
“姓名”:“迈克·克罗克”,
“url”:”https://uk.trustpilot.com/users/5d5ef7c9e427cd04ec0804db',
'图像':'https://user-images.trustpilot.com/5d5ef7c9e427cd04ec0804db/73x73.png'
}
,因此,如果要获取用户位置,请更改
附加项(数据)
函数

Ex.

def addItems(data):
    result = []
    for item in data['review']:
        user_location = None
        url = item['author']['url']
        try:
            user_location = bs(requests.get(url).content, "lxml").find('div',\
                    {'class':'user-summary-overview'}).find("div",\ 
                    {'class':'user-summary-location'}).text.strip()
        except Exception as e:
            pass
        review = {
                  'Headline': item['headline'] ,
                  'Ranking': item['reviewRating']['ratingValue'],
                  'Review': item['reviewBody'],
                  'ReviewDate': item['datePublished'],
                   'User' : item['author']['name'],
                   'Location' : user_location
                }
        result.append(review)
    return result


它的用户(大写U)而不是用户数据['review']到底是什么样子的?它是否包含“User”?根据错误,它没有回答。@Raphael已经回答了,请检查我的评论。我没有在代码中添加用户和位置函数。只是如果我添加错误消息中提到的行,我会得到一个错误。例如review={'Headline':项['Headline'],'User':项['User'],'Location':项['Location'],'Ranking':项['reviewRating'],'ratingValue'],'Review':项['reviewBody'],'ReviewDate':项['datePublished']}@min2bro,它也不使用“用户”。它的用户(大写U)而不是用户数据['review']到底是什么样子的?它是否包含“用户”?根据错误,它没有。@Raphael已经回答了,请检查我的评论。我没有在代码中添加用户和位置函数。只是如果我像错误消息中提到的那样添加一行,我会得到一个错误。例如,review={'Headline':item['Headline','user':item['user'],“位置”:项['Location'],“排名”:项['reviewRating']['ratingValue'],“评论”:项['reviewBody'],'ReviewDate':项['datePublished']}@min2bro,它也不能与“用户”一起工作。请检查问题,它也包含用户密钥。同样的代码对我来说工作正常,请检查这个imgur.com/NwxtOnj@min2bro请参阅下面的OP error label
,这是我添加用户时遇到的错误。
和错误消息此时您的解决方案看起来是最佳的。review dic中没有用户密钥而用户的替代选项是author>name。Thanks@min2bro我们可以删除所有与问题无关的注释吗?请检查问题,它包含用户密钥。同样的代码对我来说非常好,请检查这个imgur.com/NwxtOnj@min2bro请参阅下面的OP error label
,这是我添加用户时遇到的错误。
和错误消息此时,您的解决方案看起来是最佳的。review dict中没有用户密钥,用户的替代方案是author>name。Thanks@min2bro我们是否可以删除所有与问题无关的评论。