woo*_*rdb 5 python ajax scrapy web
我一直在尝试抓取网站https://fbschedules.com/new-england-patriots-schedule/
本网站使用隐藏表单向php文件提交ajax请求:https : //fbschedules.com/wp-admin/admin-ajax.php
在尝试模拟 AJAX 请求后,scrapy 会为此代码返回 400 响应:
def parse(self, response):
headers = {
'User_Agent': user_agent,
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://fbschedules.com/new-england-patriots-schedule/',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Cookie': cookie,
'DNT': '1',
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0'
}
data = {
'action': 'load_fbschedules_ajax',
'type': 'NFL',
'display': 'Season',
'team': 'New+England+Patriots',
'current_season': '2018',
'view': '',
'conference': '',
'conference-division': '',
'ncaa-subdivision': '',
'ispreseason': '',
'schedule-week': '',
}
yield scrapy.FormRequest.from_response('https://fbschedules.com/wp-admin/admin-ajax.php',
headers=headers,
formdata=data,
method='POST',
callback=self.schedule_parse)
Run Code Online (Sandbox Code Playgroud)
任何在正确方向上的帮助表示赞赏!
编辑:我还应该提到我将此蜘蛛作为单个脚本运行:
def start():
configure_logging()
runner = CrawlerRunner()
runner.crawl(NflSpider)
d = runner.join()
d.addBoth(lambda _: reactor.stop())
reactor.run()
Run Code Online (Sandbox Code Playgroud)
开始抓取页面。控制台输出如下:
2018-09-02 18:20:33 [scrapy.core.engine] 信息:Spider 打开
2018-09-02 18:20:33 [scrapy.extensions.logstats] 信息:抓取 0 页(以 0 页/分钟),抓取 0 个项目(以 0 个项目/分钟)
2018-09-02 18:20:33 [scrapy.extensions.telnet] 调试:Telnet 控制台监听 127.0.0.1:6024
2018-09-02 18:20:33 [scrapy.core.engine] 调试:爬网(400)https://fbschedules.com/wp-admin/admin-ajax.php>(参考:无)
2018-09-02 18:20:33 [scrapy.spidermiddlewares.httperror] 信息:忽略响应 <400 https://fbschedules.com/wp-admin/admin-ajax.php >:HTTP 状态代码未处理或未处理允许
2018-09-02 18:20:33 [scrapy.core.engine] 信息:关闭蜘蛛(已完成)
小智 2
我遇到了同样的问题,我通过向FormRequest
参数添加元参数来处理它。
尝试使用scrapy.FormRequest
而不是scrapy.FormRequest.from_response
:
meta = {'handle_httpstatus_all': True}
yield FormRequest('https://fbschedules.com/wp-admin/admin-ajax.php',
headers=headers,
formdata=data,
method='POST',
meta=meta,
callback=self.schedule_parse)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2001 次 |
最近记录: |