解析 scrapy splash 的输出
Parsing output from scrapy splash
我正在 https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash and https://aaqai.me/notes/scrapy-splash-setup 之后用 scrapy 1.6 测试启动实例。我的蜘蛛:
import scrapy
from scrapy_splash import SplashRequest
from scrapy.utils.response import open_in_browser
class MySpider(scrapy.Spider):
start_urls = ["http://yahoo.com"]
name = 'mytest'
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse, endpoint='render.html', args={'wait': 7.5},)
def parse(self, response):
# response.body is a result of render.html call; it
# contains HTML processed by a browser.
open_in_browser(response)
return None
输出在记事本而不是浏览器中打开。如何在浏览器中打开它?
如果您使用启动中间件以及启动响应进入常规响应对象的所有内容,您可以通过 response.css 和 response.xpath 访问。根据您使用的端点,您可以执行 JavaScript 和其他内容。
如果您需要在页面上移动和执行其他操作,您将需要编写 LUA 脚本以使用正确的端点执行。至于解析输出,它会自动进入响应对象。
摆脱掉 open_in_browser 我不确定你在做什么,但如果你只想解析页面,你可以这样做
body = response.css('body').extract_first()
links = response.css('a::attr(href)').extract()
如果你能澄清你的问题,大多数人不想查看链接来尝试猜测你遇到了什么问题。
澄清问题的更新:
听起来您可能想要 scrapy shell 和 Splash 这将使您能够试验选择器:
scrapy shell 'http://localhost:8050/render.html?url=http://page.html&timeout=10&wait=0.5'
为了在浏览器实例中访问 Splash,只需转到 http://0.0.0.0:8050/ 并在其中输入 URL。我不确定教程中的方法,但这是您与 Splash 会话交互的方式。
我正在 https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash and https://aaqai.me/notes/scrapy-splash-setup 之后用 scrapy 1.6 测试启动实例。我的蜘蛛:
import scrapy
from scrapy_splash import SplashRequest
from scrapy.utils.response import open_in_browser
class MySpider(scrapy.Spider):
start_urls = ["http://yahoo.com"]
name = 'mytest'
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse, endpoint='render.html', args={'wait': 7.5},)
def parse(self, response):
# response.body is a result of render.html call; it
# contains HTML processed by a browser.
open_in_browser(response)
return None
输出在记事本而不是浏览器中打开。如何在浏览器中打开它?
如果您使用启动中间件以及启动响应进入常规响应对象的所有内容,您可以通过 response.css 和 response.xpath 访问。根据您使用的端点,您可以执行 JavaScript 和其他内容。
如果您需要在页面上移动和执行其他操作,您将需要编写 LUA 脚本以使用正确的端点执行。至于解析输出,它会自动进入响应对象。
摆脱掉 open_in_browser 我不确定你在做什么,但如果你只想解析页面,你可以这样做
body = response.css('body').extract_first()
links = response.css('a::attr(href)').extract()
如果你能澄清你的问题,大多数人不想查看链接来尝试猜测你遇到了什么问题。
澄清问题的更新:
听起来您可能想要 scrapy shell 和 Splash 这将使您能够试验选择器:
scrapy shell 'http://localhost:8050/render.html?url=http://page.html&timeout=10&wait=0.5'
为了在浏览器实例中访问 Splash,只需转到 http://0.0.0.0:8050/ 并在其中输入 URL。我不确定教程中的方法,但这是您与 Splash 会话交互的方式。