我正在测试https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash和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
输出将在记事本而不是浏览器中打开。如何在浏览器中打开它?
答案 0 :(得分:2)
如果您使用的是启动中间件,则启动响应将进入常规响应对象,您可以通过response.css和response.xpath进行访问。根据您使用的端点,您可以执行JavaScript和其他内容。
如果需要在页面和其他内容之间移动,则需要编写LUA脚本以使用适当的端点执行。就解析输出而言,它会自动进入响应对象。
摆脱open_in_browser我不确定您在做什么,但是如果您只想解析页面,您可以这样做
body = response.css('body').extract_first()
links = response.css('a::attr(href)').extract()
如果可以,请澄清您的问题,大多数人都不想在链接中尝试并猜测您遇到的问题。
已更新的问题解答:
听起来您可能希望Splash外壳具有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会话进行交互。