【问题标题】:Scraping data presented on an overlay / new window抓取显示在覆盖/新窗口上的数据
【发布时间】:2019-05-25 22:03:32
【问题描述】:

我对网络抓取完全不熟悉,想从以下位置抓取评论和属性回复:https://www.hostelworld.com/hosteldetails.php/HI-NYC-Hostel/New-York/1850#reviews

但是,我获得的 HTML 似乎是针对宿舍页面而不是带有评论的覆盖页面,我想知道如何从评论面板获取和抓取。

我可以使用下面的 sn-p 抓取用户评论,

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

但它似乎来自评论面板的不同来源,因为我没有看到与属性回复相对应的任何类或文本。任何帮助或建议将不胜感激。

【问题讨论】:

  • 这是否需要登录,因为我在底部看到有关会话已过期的消息并且我无法查看所有评论 - 只有一小部分?
  • @QHarr 我不相信,我没有登录
  • 我不太明白你所说的评论面板和宿舍页面是什么意思
  • @Fozoro 评论加载在旅馆页面顶部的叠加层(或滑出面板)上,而不是新页面。旅馆页面是指包含旅馆照片和描述及其设施的页面。这有帮助吗?

标签: python web-scraping beautifulsoup python-requests


【解决方案1】:

如果您想抓取整个审核面板(所有页面),我建议您使用以下链接:

import requests
import pandas as pd

numb_of_pages = 10 #enter the number of pages you want to scrape
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}")

或者,如果您只想要几页的 cmets,您可以使用以下代码:

import requests
import pandas

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

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)

希望对你有帮助

【讨论】:

  • 这真的很有帮助,非常感谢 :) 您是否可能知道是否可以将 json 直接输入到 pandas 中?
  • @BenJHC 很高兴它有帮助,我刚刚更新了我的代码,以便它将所有内容存储在 pandas DataFrame 中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多