Python 使用scrapy访问xpath属性时遇到问题
我当前正在尝试删除以下url: 在这个页面上,我想提取列出的评论数量。也就是说,我想提取数字693 这是我当前的xpath:Python 使用scrapy访问xpath属性时遇到问题,python,xpath,web-scraping,html-parsing,scrapy,Python,Xpath,Web Scraping,Html Parsing,Scrapy,我当前正在尝试删除以下url: 在这个页面上,我想提取列出的评论数量。也就是说,我想提取数字693 这是我当前的xpath: sel.xpath('//*[@id="BVRRRatingSummaryLinkReadID"]/a/span/span') 它似乎只返回一个空数组,有人能建议一个正确的xpath吗?你不能这样做。如果只是从中抓取html,则不会找到任何693字符串。这些内容必须由一些AJAX代码动态创建 你不能那样做。如果只是从中抓取html,则不会找到任何693字符串。这些内容
sel.xpath('//*[@id="BVRRRatingSummaryLinkReadID"]/a/span/span')
它似乎只返回一个空数组,有人能建议一个正确的xpath吗?你不能这样做。如果只是从中抓取html,则不会找到任何693字符串。这些内容必须由一些AJAX代码动态创建 你不能那样做。如果只是从中抓取html,则不会找到任何693字符串。这些内容必须由一些AJAX代码动态创建 使用Scrapy获得的初始页面上没有评论。问题是这些评论是通过大量使用javascript加载和构建的,这使得事情变得更加复杂 基本上,您的选择是:
- 一种高级方法(例如,使用真正的浏览器和)。您甚至可以将Scrapy和Selenium结合使用:
- 中级方法:
+scrapy
- 低级方法(找出评审的构建位置并获取评审)
693
要使解决方案适应Scrapy,您需要使用
Scrapy
而不是requests
发出请求,并使用Scrapy
而不是BeautifulSoup
解析HTML。使用Scrapy获得的初始页面上没有任何评论。问题是这些评论是通过大量使用javascript加载和构建的,这使得事情变得更加复杂
基本上,您的选择是:
- 一种高级方法(例如,使用真正的浏览器和)。您甚至可以将Scrapy和Selenium结合使用:
- 中级方法:
+scrapy
- 低级方法(找出评审的构建位置并获取评审)
693
要使解决方案适应Scrapy,您需要使用
Scrapy
而不是requests
发出请求,并使用Scrapy
而不是BeautifulSoup
解析HTML,因此无法从HTML中获得响应值?您可能需要利用Webkit或类似的工具来首先呈现网页。这将更加复杂。因此没有办法从HTML中获得响应的值?您可能需要利用Webkit或类似的东西来首先呈现网页。这将更加复杂。
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