我正在使用Jupyter Python 2.7 我试图从这个网站检索数据,一切顺利,使用beautifulsoup和lxml解析器来描述或价格。
但是,当我试图抓取评论者的评论或位置时,我无法找回任何内容,只有一个空列表[]
我还试过PyQt4首先渲染它但它仍然没有用。我现在该如何解决?
我的代码附在
下面import PyQt4
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
import sys
from lxml import html
from bs4 import BeautifulSoup
import os
import requests
site = 'https://www.bedbathandbeyond.com/store/product/dyson-v7-motorhead-cord-free-stick-vacuum-in-fuchsia-steel/1061083288?brandId=162'
class Render(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit()
r = Render(site)
result = r.frame.toHtml()
formatted_result = str(result.toAscii())
tree = html.fromstring(formatted_result)
soup = BeautifulSoup(formatted_result,'lxml')
soup.find_all('span', class_ = 'BVRRValue BVRRUserLocation')#return value is []
非常感谢!
答案 0 :(得分:0)
我快速检查了引用的网址,只有点击“评分和评价”标签后,评论才会通过异步调用加载。因此,如果您只是在没有任何额外导航的情况下加载页面,那么评论将不会出现在DOM中(因此不会出现在您使用BeautifulSoup解析的HTML中)。
因此,解决方案是在获取HTML并将其传递给BeautifulSoup之前,简单地触发“评级和评论”上的点击。
或者,您可以进行相同的异步调用以自己获取评论。通过对此页面执行GET请求来检索评论的第一页:https://bedbathandbeyond.ugc.bazaarvoice.com/2009-en_us/1061083288/reviews.djs?format=embeddedhtml&page=1&scrollToTop=true
。
您可以轻松地为bedbathandbeyond上的每个产品构建此URL,因为您只需要拥有产品ID(在本例中为1061083288),可以使用例如ID为{{1}的div从原始DOM轻松获取该ID }。它包含一个带有产品ID的隐藏输入字段。然后,您可以直接替换之前的URL,这样您就可以从所有产品中获取所有评论。