【问题标题】:In Scrapy extract_first() doesnt return complete text if the string length is very large如果字符串长度非常大,在 Scrapy extract_first() 中不会返回完整的文本
【发布时间】:2019-07-21 11:48:58
【问题描述】:

我正在使用 Scrapy 抓取一个网站,它以字符串格式返回 json 类型文件。

当我使用下面的选择器时,我会按预期在列表中获得完整的数据。

response.xpath('//p/text()').extract()

此列表中的数据是一个类似 json 的字符串,我需要将其转换为我正在使用的字典json.loads()

但是当我使用下面的选择器来获取列表中存在的类似 json 的字符串时,就会出现问题。

response.xpath('//p/text()').extract_first()

这给出了部分截断的字符串作为输出,因此json.loads() 给出了未终止字符串的错误。

注意:我尝试了类似的选择器,如 .extract()[0], getall()[0] 等。都遇到了同样的问题。 打印时也会打印截断的部分字符串。

【问题讨论】:

  • 您能否提供更多详细信息?至少要抓取的网站的 URL。它可能是也可能不是 parsel 库中的错误。
  • 响应是否在每个 <p> 中包含单独的 Javascript 块?是否可以粘贴或链接示例?
  • @Sitanshu.K 该 URL 已返回 JSON 响应。为什么要用 XPath 提取它?
  • "api.bseindia.com/BseIndiaAPI/api/AnnGetData/…" 这是我正在抓取的网址。@Tomáš Linhart
  • 我想过滤通过它接收到的数据。我正在为此使用管道。

标签: python json scrapy


【解决方案1】:

使用这样的 XPath 提取器可能会弄乱数据。由于 URL 首先返回 JSON,因此您可以将整个响应加载到 JSON 对象中:

import json
json_data = json.loads(response.text)

# Items are available in json_data['Table']

这是浏览器在其中看到的内容:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多