【问题标题】:Scrapy null output but data was scrapedScrapy null 输出,但数据被抓取
【发布时间】:2013-09-02 10:23:48
【问题描述】:

我正在抓取一个网站并尝试将输出保存在 MongoDB 中。它看到代码是好的,但是当我尝试一个简单的输出(scrapy crawl IR -o items.json -t json)时,文件出来是空白的......但是蜘蛛的日志显示数据被抓取了......

这是我的蜘蛛代码

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from teste.items import IngressoRapidoItem

class IngressoRapidoSpider(BaseSpider):
   name = "IR"
   allowed_domains = ["ingressorapido.com.br"]
   start_urls = (
        'http://www.ingressorapido.com.br/eventos.aspx?genero=55',
         )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        items = []
        item = IngressoRapidoItem()
        item['banda'] = hxs.select('normalize-space(//a[contains(@href,"Evento")]    /text())').extract()
        item['local'] = hxs.select('normalize-space(//td/span[contains(@style,     "normal")]/text())').extract()
        items.append(item)
        return items

有人猜到为什么即使数据已被抓取,输出仍为空? 提前致谢

【问题讨论】:

  • 日志是什么样的?可以上传内容吗?
  • 如果你运行scrapy runspider <spider_file_name>.py -o out.json会发生什么?
  • alecxe,用你告诉我的命令输出完美!!!你能给我进一步解释一下为什么scrapy crawl/pipeline不工作吗?
  • 我运行了你的代码并在 json 中得到了两个条目你得到了什么?
  • 即“banda”:[“”],“local”:[“Teatro Riachuelo”]

标签: python json web-scraping scrapy


【解决方案1】:

运行上面发布的代码后,我可以确认数据已被抓取,但很难说这些数据是否真的有用,因为只创建了一个带有场地但没有事件名称的项目。

我稍微修改了 xpath 代码,并且能够为http://www.ingressorapido.com.br/eventos.aspx?genero=55 的第一页上显示的所有 10 个事件返回一个项目。然后我可以毫无问题地将抓取的数据写入 json 文件。

如果您有任何问题,或者 xpath 代码没有返回所需的数据,请告诉我。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from teste.items import IngressoRapidoItem

class IngressoRapidoSpider(BaseSpider):
    name = "IR"
    allowed_domains = ["ingressorapido.com.br"]
    start_urls = (
        'http://www.ingressorapido.com.br/eventos.aspx?genero=55',
         )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        events = hxs.select('//table[@id="ContentPlaceHolder1_dlEventos"]//table//td[2]')
        items = []
        for e in events:
            item = IngressoRapidoItem()
            item['banda'] = e.select('normalize-space(.//a//text())').extract()
            item['local'] = e.select('normalize-space(.//span//text())').extract()
            items.append(item)
        return items

【讨论】:

  • 代码确实可以工作,但在 json、xml 或任何东西上仍然没有输出...我认为这可能是写权限,但文件已创建,没有数据...
  • 尝试删除 settings.py 文件中的所有管道引用并再次运行该命令。
  • 仍然是空的...即使管道关闭
  • 能否发布您的 settings.py 文件?
  • 关闭管道:BOT_NAME = 'teste' SPIDER_MODULES = ['teste.spiders'] NEWSPIDER_MODULE = 'teste.spiders'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多