Как очистить ссылку на сайте с помощью scrapy - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь использовать scrapy для очистки сайта и ссылки в содержимом сайта. Однако, когда я это делаю, я получаю сообщение об ошибке в строке над параметром yield при синтаксическом анализе:
TypeError: 'NoneType' object does not support item assignment

Вот мой код:

class PostsSpider(scrapy.Spider):
    name = "posts"
    start_urls = ['https://www.nba.com/teams/bucks']
    allowed_domains = ['nba.com']

    def parse(self, response):
        for post in response.css('.nba-player-index section section'):
            playerPage = response.urljoin(post.css('a').attrib['href'])
            item = yield scrapy.Request(playerPage, callback=self.helper)
            item['number'] = post.css('span.nba-player-trending-item__number::text').get(),
            yield item

    def helper(self, response):
       print("--->"+response.css("title").get())
       item = Item()
       item['title'] = response.css("title::text").get()
       yield item

class Item(scrapy.Item):
    # define the fields for your item here like:
    number = scrapy.Field()
    title = scrapy.Field()
    ppg = scrapy.Field()

1 Ответ

0 голосов
/ 30 мая 2020

Что вы можете сделать, так это передать number данные помощнику вместо того, чтобы делать это. Примерно так:

def parse(self, response):
    for post in response.css('.nba-player-index section section'):
        playerPage = response.urljoin(post.css('a').attrib['href'])
        meta = response.meta.copy()
        meta['number'] = post.css('span.nba-player-trending-item__number::text').get()
        yield scrapy.Request(playerPage, callback=self.helper, meta=meta)


def helper(self, response):
       # here you will get `number` in response.meta['number'] that you can yield further.
       item = Item()
       item['number'] = response.meta.get('number)
       yield item
...