脚本运行无异常,但未收集数据

时间:2018-12-14 20:39:51

标签: python python-3.x scrapy

这是一个Python Scrapy脚本,我正在从一些材料书中学习。 这是一个简单的Web抓取示例。 我可以毫无例外地运行它。但是运行它似乎实际上并没有收集到任何数据。 所以我经过下面的代码,有人可以尝试运行它,让我知道它是否对您有用吗?因为这是学习示例,我不认为这是错误的,或者我的python lib不匹配。谢谢。

import scrapy
from scrapy.crawler import CrawlerProcess

class PythonEventsSpider(scrapy.Spider):
    name = 'pythoneventsspider'

    start_urls = ['https://www.python.org/events/pythonevents/',]
    found_events = []

    def parse(self, response):
        for event in response.xpath('//ul[contains(@class, "list-recent-events")]/li'):
            event_details = dict()
            event_details['name'] = event.xpath('h3[@class="event-title"]/a/text()').extract_first()
            event_details['location'] = event.xpath('p/span[@class="event-location"]/text()').extract_first()
            event_details['time'] = event.xpath('p/time/text()').extract_first()
            self.found_events.append(event_details)


if __name__ == "__main__":
    process = CrawlerProcess({ 'LOG_LEVEL': 'ERROR'})
    process.crawl(PythonEventsSpider)
    spider = next(iter(process.crawlers)).spider
    process.start()

    for event in spider.found_events: print(event)

1 个答案:

答案 0 :(得分:0)

Scrapy spider回调方法可以返回(或产生)两件事:

  1. Requests
  2. Items

在您共享的代码上,有一个第一个请求(针对if (foodHit != null) { aShark.eatFood() } 中定义的站点),并且src/main/resources/application.properties方法是所有请求的默认回调方法(如果没有#setting to default locale spring.mvc.locale=pt_BR #force locale resolver to spring boot reconized your settings spring.mvc.locale-resolver=fixed 参数已指定)。

start_urls方法应返回一个Item或一个Request,而您并未这​​样做,因此应将其更改为:

parse

现在,您的蜘蛛正在输出一个项目(在本例中为callback的{​​{1}})。