如何解决使用scrapy-splash 抓取javascript 生成的结果
当您在字典搜索框中引入一些首字母缩略词时,我试图抓取由 javascript 函数生成的结果。这是我正在使用的代码:
import scrapy
from scrapy_splash import SplashFormRequest
class SedomSpider(scrapy.Spider):
name = 'sedom-spider'
url_s = 'https://www.sedom.es/diccionario/'
formdata = {'sigla': 'AA'}
def parse(self,response):
return SplashFormRequest(
url=self.url_s,formdata=self.formdata,callback=self.after_login
)
def after_login(self,response):
print(response.body)
我获得了 html 正文,但我应该看到的生成结果 (<span id="resultado">...</span>
) 不在其中...
我也试过:
import scrapy
from scrapy_splash import SplashRequest,SplashFormRequest
class SedomSpider(scrapy.Spider):
name = 'sedom-spider'
url_s = 'https://www.sedom.es/diccionario/'
formdata = {'sigla': 'AA'}
def start_requests(self):
yield SplashRequest(
url=self.url_s,callback=self.parse
)
def parse(self,response):
yield SplashFormRequest.from_response(
response,callback=self.after_login
)
def after_login(self,response):
print(response.body)
但后来我收到此错误:
ValueError:请求 url 中缺少方案:javascript:procesar()
我知道scrapy-splash 配置良好,因为我做了这个tutorial 并且工作正常。我可能对使用这个库有误解,因为我已经尝试了我找到的每一个解决方案,但我无法让它工作......
解决方法
好吧,我终于找到了解决方案。我把它贴在这里以防对某人有用。
import scrapy
from scrapy_splash import SplashFormRequest
class SedomSpider(scrapy.Spider):
name = 'sedom-spider'
start_urls = ['https://www.sedom.es/diccionario/',]
formdata = {'sigla': 'AA'}
def parse(self,response):
yield SplashFormRequest.from_response(
response,url='https://www.sedom.es/diccionario/procesarBusquedaSigla.php',formdata=self.formdata,callback=self.parse_details,args={'wait': 5}
)
def parse_details(self,response):
print(response.body)
主要问题是我没有在 SplashFormRequest.from_response()
中使用正确的网址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。