Как правильно определить в response.css и yield в scrapy

#scrapy

#scrapy

Вопрос:

Я новичок в Scrapy, и есть одна вещь, которую я пытался сделать в течение двух дней, но все еще безуспешно. Я тренируюсь извлекать информацию о футболистах, перечисленных в https://sofifa.com /. Я принял пример кода из https://docs.scrapy.org / и отредактируйте его, как показано ниже. Информация, которую я использую для извлечения, — это OVA.

Кто-нибудь знает, как мне правильно определить элемент «span.something…» в приведенном ниже коде?

Большое спасибо, Джеймс

 import scrapy
class ToScrapeCSSSpider(scrapy.Spider):
    name = "player-css"
    start_urls = [
        'https://sofifa.com/players?type=allamp;tm[0]=1amp;r=210024amp;set=true',
    ]

    **def parse(self, response):
        for playerInfor in response.css("div.card"):
            yield {**
                **'OVA': playerInfor.css("span.bp3-tag p::bp3-tag p").extract()**
            }

        next_page_url = response.css("li.next > a::attr(href)").extract_first()
        if next_page_url is not None:
            yield scrapy.Request(response.urljoin(next_page_url))
 

Ответ №1:

используйте этот селектор css response.css("tbody.list") вместо response.css("div.card")

response.css("tbody.list") данные легко извлечь, но когда я использую response.css("div.card") result, это был какой-то пустой список с ожидаемым результатом.

 for playerInfor in response.css("tbody.list"):
     print( playerInfor.css('td.col.col-oa.col-sort span::text').getall())
 

вывод

[’87’, ’84’, ’84’, ’82’, ’80’, ’80’, ’80’, ’80’, ’79’, ’79’, ’79’, ’79’, ’79’, ’78’, ’77’, ’77’, ’77’, ’76’, ’76’, ’76’, ’75’, ’75’, ’74’, ’74’, ’73’, ’72’, ’72’, ’70’, ’62’, ’62’, ’60’, ’58’, ’56’]

другой подход

 def parse(self, response):
        mydata =response.css('tbody.list td.col.col-oa.col-sort span::text').extract()
        yield {
            "OVA":mydata
        }
 

#вывод mydata

[’87’, ’84’, ’84’, ’82’, ’80’, ’80’, ’80’, ’80’, ’79’, ’79’, ’79’, ’79’, ’79’, ’78’, ’77’, ’77’, ’77’, ’76’, ’76’, ’76’, ’75’, ’75’, ’74’, ’74’, ’73’, ’72’, ’72’, ’70’, ’62’, ’62’, ’60’, ’58’, ’56’]

Комментарии:

1. Привет. Это блестяще. Вы спасаете мои дни. Я последую вашим инструкциям и попробую использовать и другие данные на этом сайте.

2. Привет, я пробовал точно так же, как вы руководствовались. Я мог бы извлечь некоторые данные. Однако некоторые из них, похоже, недоступны. Например, когда я попытался с помощью : playerInfor.css(«td.col.col-lo span ::text»).extract() , это значение не будет извлечено. Я не уверен, что это значение недоступно или я делаю что-то не так. Его формат очень похож на другой. Не могли бы вы помочь мне быстро взглянуть на это? Большое спасибо.

3. какой столбец вы хотите извлечь?

4. Привет. Спасибо за ваш совет. Я попробовал с новым URL, и теперь он отлично работает ^_^. Прошу прощения, это мой второй пост на этом форуме, поэтому я не знал, что есть кнопка «Принять». Я это уже сделал. Всего наилучшего.