首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Tripadvisor抓取评级

从Tripadvisor抓取评级
EN

Stack Overflow用户
提问于 2021-08-05 20:12:35
回答 1查看 67关注 0票数 1

我从TripAdvisor (https://www.tripadvisor.it/Attractions-g187147-Activities-c42-Paris_Ile_de_France.html)中删除了在巴黎要做的活动。

我写的代码运行良好,但我仍然没有找到一种方法来获得每个活动的评级。Tripadvisor中的评分是从5轮中表示的,我需要知道这些轮中有多少轮是彩色的。

我在"rating“字段中什么也没有得到。

遵循以下代码:

代码语言:javascript
复制
wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
wd.get("https://www.tripadvisor.it/Attractions-g187147-Activities-c42-Paris_Ile_de_France.html") 

import pprint 
detail_tours = [] 
for tour in list_tours:
    url = tour.find_elements_by_css_selector("a")[0].get_attribute("href")
    title = ""
    reviews = ""
    rating = ""
    if(len(tour.find_elements_by_css_selector("._1gpq3zsA._1zP41Z7X")) > 0):
      title = tour.find_elements_by_css_selector("._1gpq3zsA._1zP41Z7X")[0].text 
    if(len(tour.find_elements_by_css_selector("._7c6GgQ6n._22upaSQN._37QDe3gr.WullykOU._3WoyIIcL")) > 0):
      reviews = tour.find_elements_by_css_selector("._7c6GgQ6n._22upaSQN._37QDe3gr.WullykOU._3WoyIIcL")[0].text 
    if(len(tour.find_elements_by_css_selector(".zWXXYhVR")) > 0):
      rating = tour.find_elements_by_css_selector(".zWXXYhVR")[0].text

detail_tours.append({'url': url,
                        'title': title,
                        'reviews': reviews,
                        'rating': rating})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 21:08:07

我将以类似于建议代码的方式使用BeautifulSoup。(我还建议您研究html的结构,但看到原始代码,我认为这没有必要。)

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
import re

header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"}

resp = requests.get('https://www.tripadvisor.it/Attractions-g187147-Activities-c42-Paris_Ile_de_France.html', headers=header)
if resp.status_code == 200:
    soup = BeautifulSoup(resp.text, 'lxml')
    cards = soup.find_all('div', {'data-automation': 'cardWrapper'})
    for card in cards:
        rating = card.find('svg', {'class': 'zWXXYhVR'})
        match = re.match('Punteggio ([0-9,]+)', rating.attrs['aria-label'])[1]
        print(float(match.replace(',', '.')))

还有一个小的奖励信息,链接中以oa开头的部分(在下面的例子中: oa60)表示起始偏移量,它以30个结果增量运行-因此,如果您想要更改页面,您可以更改您的链接以包含oa30、oa60、oa90等。:https://www.tripadvisor.it/Attractions-g187147-Activities-c42-oa60-Paris_Ile_de_France.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68672978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档