python - 无法使用 scrapy 访问 xpath 属性

标签 python xpath web-scraping html-parsing scrapy

我目前正在尝试抓取以下网址: http://www.bedbathandbeyond.com/store/product/dyson-dc59-motorhead-cordless-vacuum/1042997979?categoryId=10562

在此页面上,我想提取列出的评论数。即我要提取数字693。

这是我当前的 xpath:

sel.xpath('//*[@id="BVRRRatingSummaryLinkReadID"]/a/span/span')

它似乎只返回一个空数组,有人可以建议一个正确的 xpath 吗?

最佳答案

在您使用 Scrapy 获得的初始页面上没有评论。问题是评论是通过大量使用 javascript 加载和构建的,这使事情变得更加复杂。

基本上,您的选择是:

这是一个涉及使用 json 解析 javascript 代码的低级方法的工作示例和 slimit , 从中提取 HTML 并通过 BeautifulSoup 解析它:

import json

from bs4 import BeautifulSoup
import requests
from slimit import ast
from slimit.parser import Parser
from slimit.visitors import nodevisitor

ID = 1042997979

url = 'http://bedbathandbeyond.ugc.bazaarvoice.com/2009-en_us/{id}/reviews.djs?format=embeddedhtml&sort=submissionTime'.format(id=ID)

response = requests.get(url)

parser = Parser()
tree = parser.parse(response.content)
data = ""
for node in nodevisitor.visit(tree):
    if isinstance(node, ast.Object):
        data = json.loads(node.to_ecma())
        if "BVRRSourceID" in data:
            break

soup = BeautifulSoup(data['BVRRSourceID'])
print soup.select('span.BVRRCount span.BVRRNumber')[0].text

打印 693

要使解决方案适应 Scrapy,您需要使用 Scrapy 而不是 requests 发出请求,并使用 Scrapy 解析 HTML而不是 BeautifulSoup

关于python - 无法使用 scrapy 访问 xpath 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426768/

相关文章:

python - 如何在 Python 中使用 psycopg2-binary?

Python - 通过一周中的所有天对数据框进行排序

javascript - 在 Protractor 中,通过2个属性选择一个元素

python - 如何测试多个变量与单个值的相等性?

java - 使用 XPath 从 WSDL XML 中提取对象列表

ios - (亲亲)XML xpath和默认命名空间

web-scraping - scrapy-如何停止重定向(302)

python - 抓取多个页面时经常出现 HTTP 错误 413

python - 如何用python写一个不间断的爬虫并在服务器上运行?

python - 根据匹配日期从另一个模型获取值(value)