beautifulsoup返回空值

时间:2018-04-18 22:19:40

标签: python python-2.7 web-scraping beautifulsoup pyqt4

我正在使用Jupyter Python 2.7 我试图从这个网站检索数据,一切顺利,使用beautifulsoup和lxml解析器来描述或价格。

网站=' https://www.bedbathandbeyond.com/store/product/dyson-v7-motorhead-cord-free-stick-vacuum-in-fuchsia-steel/1061083288?brandId=162'

但是,当我试图抓取评论者的评论或位置时,我无法找回任何内容,只有一个空列表[]

我还试过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 []

非常感谢!

1 个答案:

答案 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,这样您就可以从所有产品中获取所有评论。