Tripadvisor的刮削评级

2024-05-16 11:14:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我编写的代码工作得很好,但我仍然没有找到一种方法来获得每个活动的评级。Tripadvisor中的评级由5轮表示,我需要知道其中有多少轮是彩色的

我在“评级”字段中未获得任何信息

遵守守则:

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})

Tags: texthttpsurlbyleniftitleelements
1条回答
网友
1楼 · 发布于 2024-05-16 11:14:15

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

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

相关问题 更多 >