如何通过触发“阅读更多”按钮来抓取数据

时间:2019-06-16 10:43:26

标签: python web-scraping beautifulsoup

我正在尝试使用python中的BeautifulSoup从https://www.mouthshut.com/product-reviews/ICICI-Lombard-Auto-Insurance-reviews-925641018抓取评论。

实际上,评论内容具有“阅读更多...”按钮。如何触发该按钮以获取全部内容?

我发现单击按钮时会触发XHR请求。如何使用python模拟呢?

此外,在检查“阅读更多...”按钮后,我得到了:

<a style="cursor:pointer" onclick="bindreviewcontent('2836986',this,false,'I found this review of ICICI Lombard Auto Insurance pretty useful',925641018,'.jpg','I found this review of ICICI Lombard Auto Insurance pretty useful %23WriteShareWin','https://www.mouthshut.com/review/ICICI-Lombard-Auto-Insurance-review-rmlrrturotn','ICICI Lombard Auto Insurance',' 1/5','rmlrrturotn');">Read More</a>

如何使用python触发onclick事件?

3 个答案:

答案 0 :(得分:0)

有两种方法可以解决此问题。一种方法是使用selenium。它允许您以编程方式控制浏览器(支持最常见的浏览器,如Firefox和Chrome)。我不熟悉它,在很多情况下它可能会过大(我认为浏览器会产生一些开销),但是很高兴知道。

另一种方法是进行更多检查,以查看单击“更多信息”按钮时的情况。开发人员工具中的“网络”标签(我使用的是Chrome,但我认为Firefox也具有同样的功能)可以通过向您显示浏览器正在发送的所有HTTP请求来提供帮助。

我发现,当您单击“阅读更多”按钮时,将使用以下数据向POST发送一个https://www.mouthshut.com/review/CorporateResponse.ashx请求:

type: review
reviewid: 2836986
corp: false
isvideo: false
fbmessage: I found this review of ICICI Lombard Auto Insurance pretty useful
catid: 925641018
prodimg: .jpg
twittermsg: I found this review of ICICI Lombard Auto Insurance pretty useful %23WriteShareWin
twitterlnk: https://www.mouthshut.com/review/ICICI-Lombard-Auto-Insurance-review-rmlrrturotn
catname: ICICI Lombard Auto Insurance
rating_str:  1/5
usession: 0

但是,当我刚刚发送带有这些数据的POST请求时,该请求不起作用。这通常意味着HTTP标头中有一些重要的内容。通常是cookie;我已经证实确实如此。使用requests程序包可以轻松实现此解决方案(无论如何您都应该完全使用它):使用requests.Session

这里是概念证明:

import requests
with requests.Session() as s:
    s.get('https://www.mouthshut.com/product-reviews/ICICI-Lombard-Auto-Insurance-reviews-925641018')
    print(s.post('https://www.mouthshut.com/review/CorporateResponse.ashx',
                 data = {'type': 'review', 'reviewid': '2836986', 'catid': '925641018', 'corp': 'false', 'catname': ''}
                ).text)

结果是一些HTML,其中包含您要查找的内容。享受汤!

答案 1 :(得分:0)

提取所有带有评分和链接的评论

template<typename T>
void func(T&& param);

答案 2 :(得分:0)

像 Flipkart 这样的网站需要像 Selenium 这样的工具以编程方式点击阅读更多链接。这是用于此类实现的 link