Scrapy脚本运行正常,但没有收集到数据

2024-04-26 06:07:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个Python脚本,我正在学习一些材料书。 这是一个简单的网页抓取样本。 我可以毫无例外地运行它,但是运行它似乎没有实际收集到任何数据。 所以我过去的代码吼叫,有人可以尝试运行它,让我知道它是否适合你?因为这是学习样本,我不认为它是错误的,或者我的python库不匹配。谢谢你

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)

Tags: textnameimporteventextractdetailseventsprocess
1条回答
网友
1楼 · 发布于 2024-04-26 06:07:30

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

  1. Requests
  2. Items

在共享的代码中有第一个请求(针对start_urls中定义的站点),并且parse方法是所有请求的默认回调方法(如果未指定callback参数)

parse方法应该返回一个项或请求,而您并没有这样做,因此应该对其进行如下更改:

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)

        yield event_details

现在您的spider正在输出一个项(在本例中称为dict

相关问题 更多 >