我使用请求来获取和解析使用Scrapy with Scrapyrt(实时刮取)刮取的一些数据。
我是这样做的:
#pass spider to requests parameters #
params = {
'spider_name': spider,
'start_requests':True
}
# scrape items
response = requests.get('http://scrapyrt:9080/crawl.json', params)
print ('RESPONSE JSON',response.json())
data = response.json()
根据Scrapy文档,当'start\u requests'
参数设置为True
时,爬行器会自动请求URL并将响应传递给解析方法,解析方法是解析请求时使用的默认方法。
start_requests
类型:布尔型
可选的
spider是否应执行Scrapy.spider.start\u请求方法。在没有ScrapyRT的情况下正常运行Scrapy Spider时,默认情况下会执行start_请求,但此方法默认情况下不会在API中执行。默认情况下,我们假设spider只对参数中提供的url进行爬网,而不请求启动spider类中定义的url。start\u requests参数覆盖此行为。如果存在此参数,API将执行start\ U请求蜘蛛方法。
但是设置不起作用。日志:
[2019-05-19 06:11:14,835: DEBUG/ForkPoolWorker-4] Starting new HTTP connection (1): scrapyrt:9080
[2019-05-19 06:11:15,414: DEBUG/ForkPoolWorker-4] http://scrapyrt:9080 "GET /crawl.json?spider_name=precious_tracks&start_requests=True HTTP/1.1" 500 7784
[2019-05-19 06:11:15,472: ERROR/ForkPoolWorker-4] Task project.api.routes.background.scrape_allmusic[87dbd825-dc1c-4789-8ee0-4151e5821798] raised unexpected: JSONDecodeError('Expecting value: line 1 column 1 (char 0)',)
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/celery/app/trace.py", line 382, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/celery/app/trace.py", line 641, in __protected_call__
return self.run(*args, **kwargs)
File "/usr/src/app/project/api/routes/background.py", line 908, in scrape_allmusic
print ('RESPONSE JSON',response.json())
File "/usr/lib/python3.6/site-packages/requests/models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
该错误是由于Twisted19.2.0
(scrapyrt依赖项)的错误造成的,该错误假定响应类型错误。
一旦我安装了Twisted==18.9.0
,它就工作了。
问题内容: 尝试解码JSON 时出现错误。 我用于API调用的URL在浏览器中可以正常工作,但是通过curl请求完成时会出现此错误。以下是我用于curl请求的代码。 错误发生在 完整回溯: 追溯: 问题答案: 总结评论中的对话: 不需要使用库,Python作为模块包含了相同的库。 无需解码从UTF8到unicode的响应,/ 方法可以本地处理UTF8编码的数据。 有一个非常古老的API。除非您有特
问题内容: 我在使用json.loads转换为dict对象时遇到麻烦,我无法弄清楚我在做什么错。我得到的确切错误是 这是我的代码: 我很确定错误发生在第二行到最后一行 但我不知道该如何解决。任何意见,将不胜感激。 问题答案: 将json字符串加载到python中,将python转储到json字符串中,例如: 所以那行是不正确的,因为您正在尝试使用python ,并期望应该有一个有效的。 因此,如果
我试图获取json对象,它告诉我它需要一个值,尽管我在r.json()中定义了json的路径。还有,当我做r.headers[内容类型]时,给我文本/html;字符集=ISO-8859-1。。。谢谢大家抽出时间
这是来自api的json数组数据/json对象数据,获取错误应为begin\u数组,但在第3行和第2列路径中是begin\u对象$ 这是来自api的json数组数据/json对象数据,获取错误应为begin\u数组,但在第3行和第2列路径中是begin\u对象$ 这是来自api的json数组数据/json对象数据,获取错误应为begin\u数组,但在第3行和第2列路径中是begin\u对象$ 这是
问题内容: 我花了6个小时以上的时间在代码中找到异常或特殊字符,但找不到。我在这里检查了所有类似的消息。 我正在发送带有巨大弹出窗口的表单。首先,我使用内联弹出窗口打开表单,而不是将所有输入发送到main.js进行验证。 所以,我只需要一只第三只眼。 我有:,, 这是代码 形成 JS / AJAX PHP-register.php 错误消息在这里 JSON输出 Chrome控制台: Firefox
问题内容: 我有这种方法: 我想解析一个JSON: 但是我收到一条错误消息: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但位于第1行第1列 问题答案: 即使没有看到您的JSON字符串,您也可以从错误消息中得知,它不是要解析为类实例的正确结构。 Gson希望您的JSON字符串