【问题标题】:Scrapy not crawling or scraping websites like seatgeek/vividseatsScrapy 不会抓取或抓取诸如 seatgeek/vividseats 之类的网站
【发布时间】:2018-02-27 15:17:02
【问题描述】:

我正在尝试从 seatgeek 中获取票务信息,但我很难做到这一点。当我运行我的代码时,我得到了这个:

INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

我的想法是我会输入节目/活动的名称,scrapy 会抓取该节目的每个表演的 URL,然后抓取票价等。我的代码如下:

import scrapy
from seatgeek import items

class seatgeekSpider(scrapy.Spider):
    name = "seatgeek_spider"
    showname = input("Enter Show name (lower case please): ")
    showname = showname.replace(' ', '-')
    start_urls = "https://seatgeek.com/" + showname + "-tickets.html"

    def parse_performance(self, response):
        for href in response.xpath('//a[@class="event-listing-title"]/@href').extract():
            yield scrapy.Request(
                url= 'https://seatgeek.com/' + href,
                callback=self.parse_ticketinv,
                method="POST",
                meta={'url': href})

    def parse_ticketinv(self, response):

        price = response.xpath('//span[@class="omnibox__listing__buy__price"]').extract()
        performance = response.xpath('//div[@class="event-detail-words faint-words"]/text()').extract()
        quantity = response.xpath('//div[@class="omnibox__seatview__availability"]/text()').extract()
        seatinfo = response.xpath('//div[@class="omnibox__listing__section"]/text()').extract()

        # creating scrapy items
        item = items.seatgeekItem()
        item['price'] = price
        item['performance'] = performance
        item['quantity'] = quantity
        item['seatinfo'] = seatinfo

        yield item

这是我的 items.py 代码:

import scrapy

class SeatgeekItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    price = scrapy.Field()
    performnace = scrapy.Field()
    quantity = scrapy.Field()
    seatinfo = scrapy.Field()

任何帮助将不胜感激 - 谢谢!

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    我可以看到两个直接的问题:

    • start_urls 应该是一个列表;你应该也会看到这样的错误:

      Traceback (most recent call last):
      (...)
          raise ValueError('Missing scheme in request url: %s' % self._url)
      ValueError: Missing scheme in request url: h
      
    • 默认情况下,start_urls 中用于 url 的回调是 parse(),在您的代码中没有定义。也许您应该重命名您的 parse_performance() 方法?

    另外,spider arguments 是获取用户输入的更常见方式。

    【讨论】:

    • 谢谢!这行得通,但现在我有一个单独的问题.. 我似乎无法将抓取的项目写入 csv。我会更新我原来的帖子。
    • 我认为提出一个新问题会比编辑这个问题更好,因为编辑代码会隐藏原始问题,而您的大部分问题和我的回答都不再有意义。
    • Fair- 将提出一个新问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多