【问题标题】:How to Scrape reviews with read more from Webpages using BeautifulSoup如何使用 BeautifulSoup 从网页中阅读更多内容来刮取评论
【发布时间】:2017-08-17 12:55:51
【问题描述】:

我正在尝试从网站上抓取评论,但无法通过 '阅读更多' 选项抓取评论。 在阅读更多内容之前,我只能获取数据。 我正在使用 BeautifulSoup。 任何帮助表示赞赏。

【问题讨论】:

    标签: python web-scraping beautifulsoup bs4


    【解决方案1】:

    您将不得不使用 selenium 提供的单击选项,这将允许您找到阅读更多标签或类并单击它,一旦它出现,您将不得不再次单击它.. 当它不显示时你将不得不废弃你需要的内容,

    【讨论】:

    • 你能解释一下bs4中的click option是什么以及如何使用它吗?
    • @user5444075 我的错误我在谈论硒......bs4不支持点击。您至少应该发布您的代码或您要废弃的网站,以便有人可以帮助您
    • 我尝试获取链接,“阅读更多”指向我有一个带有 onclick 属性的 标记。我不能用它来扩大评论吗?
    • @user5444075 伙计,您需要稍微研究一下 selenium,文档对如何找到您感兴趣的元素以及通过 id 或 class 的不同选项有明确的指导。如果标签是可点击的,请点击它。 documentation-selenium
    • 我对硒做了一些研究,发现硒可能很慢..是真的
    【解决方案2】:

    这是一个演示,说明如何获取所有评论的全文。运行它并获得结果。执行后稍等片刻。这就是您无需单击任何链接即可完成的方法。

    import requests ; from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(requests.get("http://www.mouthshut.com/product-reviews/Lakeside-Chalet-Mumbai-reviews-925017044").text, "html.parser")
    for title in soup.select("a[id^=ctl00_ctl00_ContentPlaceHolderFooter_ContentPlaceHolderBody_rptreviews_]"):
        items = title.get('href')
        if items:
            broth = BeautifulSoup(requests.get(items).text, "html.parser")
            for item in broth.select("div.user-review p.lnhgt"):
                print(item.text)
    

    【讨论】:

    • 好的,所以我尝试了这段代码并且它有效,现在据我了解,您首先请求网站,然后使用“阅读更多”搜索评论标题的链接,请求链接通过获取它的“href”,将其存储在肉汤中,最后搜索评论并循环浏览其段落(如果我错了,请纠正我)。有两件事困扰着我,一是在打印标题时,我得到了排除 a# 的完整链接(为什么?),你从哪里得到“div.user-review p”(我知道它在我们访问的链接中,但是在那个页面的哪里。)
    • 请检查以下页面的元素,您将在其中找到 ["div.user-review p"] mouthshut.com/review/Lakeside-Chalet-Mumbai-review-mlmqulpsq btw,我使用从“和平、安静和什么”中提取的链接提出了第二个请求一个视图!”。
    • 我也尝试了您的代码,但找不到为什么要打印 2 次评论。我还检查了该页面,没有发现任何冗余。你能帮我解决这个问题吗?
    • 您的主要问题是如何在 BeautifulSoup 的帮助下通过操作阅读更多选项来获得完整评论。我试图向你展示你是如何做到的。也许您错过了我的回答下的那一行,我明确写过它尚未优化,但会让您了解该过程。谢谢。
    • 试试更新的代码。我已对其进行了编辑以达到您的目的。谢谢。
    【解决方案3】:

    @user5444075 和@SIM

    div.user-review p.lnhgt
    

    上面的好像已经不存在了。

    下面的xpath可以用来获取所有的href。

    //a[contains(@id,"lnkTitle")]/@href
    

    使用上面的 href 向服务器发出新请求并获取类 rev-main-content 的文本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      相关资源
      最近更新 更多