#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, и теперь он отлично работает ^_^. Прошу прощения, это мой второй пост на этом форуме, поэтому я не знал, что есть кнопка «Принять». Я это уже сделал. Всего наилучшего.