Утилизация данных, представленных в оверлее / новом окне - PullRequest
0 голосов
/ 26 мая 2019

Я совершенно новичок в веб-поиске и хотел бы отменить отзывы и ответы о недвижимости: https://www.hostelworld.com/hosteldetails.php/HI-NYC-Hostel/New-York/1850#reviews

Однако полученный мной HTML-код, скорее всего, относится к странице общежития, а не к наложенной странице с отзывами, и мне было интересно, как получить ее и извлечь из панели отзывов.

Я могу просмотреть отзывы пользователей, используя приведенный ниже фрагмент,

from bs4 import BeautifulSoup

url = 'https://www.hostelworld.com/hosteldetails.php/HI-NYC-Hostel/New-York/1850#reviews'

response = requests.get(url)
SoupPage = BeautifulSoup(response.text, 'html.parser')
reviews = SoupPage.find_all(class_="review-info")

for rev in reviews:
    text = rev.find(class_="notes")

но, похоже, он из другого источника на панели отзывов, так как я не вижу классов или текста, соответствующих ответам свойства. Буду признателен за любую помощь или предложения.

1 Ответ

1 голос
/ 26 мая 2019

Если вы хотите удалить всю панель обзора (все страницы), я бы рекомендовал использовать следующую ссылку:

import requests
import pandas as pd

numb_of_pages = 10 #enter the number of pages you want to scrap
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:67.0) Gecko/20100101 Firefox/67.0"}
df = pd.DataFrame()

for nmb in range(1,10):
    url = f"https://www.hostelworld.com/properties/1850/reviews?sort=newest&page={nmb}&monthCount=36"
    data_raw = requests.get(url, headers=headers).json()
    df = df.append(data_raw["reviews"])

    print(f"page: {nmb} out of {numb_of_pages}")

В качестве альтернативы, если вам нужны комментарии на несколько страниц, вы можете использовать код ниже:

import requests
import pandas

numb_of_pages = 10 #enter the number of pages you want to scrap

headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:67.0) Gecko/20100101 Firefox/67.0"}
df = pd.DataFrame()

for nmb in range(1,numb_of_pages):
    url = f"https://www.hostelworld.com/properties/1850/reviews?sort=newest&page={nmb}&monthCount=36"
    data_raw = requests.get(url, headers=headers).json()
    df = df.append(data_raw["reviews"])

    print(f"page: {nmb} out of {numb_of_pages}")

print(df)

(PS: отзывы принимаются в виде строки JSON, поэтому вам не нужен BeautifulSoup)

Надеюсь, это поможет

...