Выскабливание бронирования коментариев с питоном - PullRequest
3 голосов
/ 13 апреля 2019

Я пытаюсь получить заголовки комментариев Booking.com с этого сайта:

https://www.booking.com/reviews/co/hotel/ibis-bogota-museo.es.html?page=1;r_lang=all;rows=75,

, где r_lang=all в основном говорит, что на сайте должны отображаться комментарии на всех языках.

Чтобы получить заголовки с этой страницы, я делаю это:

from urllib.request import urlopen
from bs4 import BeautifulSoup

page = urlopen(url)
soup = BeautifulSoup(page)
reviews = soup.findAll("li", {"class": "review_item clearfix "})

for review in reviews:
    print(review.find("div", {"class": "review_item_header_content"}).text)

На веб-сайте (см. Скриншот) первые два заголовка должны быть «Sencillamente placentera» и «Это моглобыло здорово. "Тем не менее, почему-то URL загружает комментарии только на испанском: «Sencillamente placentera»

«La atención de la chica del Restaurante»

«El desayuno estilo шведский стол, полностью»

«Мне приятно, ubicación, y la vista».

«Su ubicación es muy buena».

Я заметил, что если в URL-адресе я изменю «museo.es».на 'museo.en.', я получаю заголовки английских комментариев.Но это противоречиво, потому что, если я загружаю исходный URL, я получаю комментарии на английском, французском, испанском и т. Д. Как я могу это исправить?Спасибо

enter image description here

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Серверы могут быть настроены на отправку различных ответов в зависимости от запроса браузера.Добавление User-Agent, похоже, решает проблему.

import urllib.request
from bs4 import BeautifulSoup
url='https://www.booking.com/reviews/co/hotel/ibis-bogota-museo.es.html?page=1;r_lang=all;rows=75'
req = urllib.request.Request(
    url,
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36',
    }
)

f = urllib.request.urlopen(req)
soup = BeautifulSoup(f.read().decode('utf-8'),'html.parser')
reviews = soup.findAll("li", {"class": "review_item clearfix "})
for review in reviews:
    print(review.find("div", {"class": "review_item_header_content"}).text)

Вывод:

“Sencillamente placentera”


“It could had been great.”


“will never stay their in the future.”


“Hôtel bien situé.”
...
1 голос
/ 13 апреля 2019

Вы всегда можете использовать браузер в качестве плана B. У Selenium такой проблемы нет

from selenium import webdriver

d = webdriver.Chrome()
d.get('https://www.booking.com/reviews/co/hotel/ibis-bogota-museo.es.html?page=1;r_lang=all;rows=75')
titles = [item.text for item in d.find_elements_by_css_selector('.review_item_review_header [itemprop=name]')]
print(titles)
...