Я написал скрипт на python с использованием scrapy для получения ссылок из ответа после отправки запроса на определенный URL. Ссылки отлично просматриваются, когда я пытаюсь использовать следующий скрипт.
Рабочий:
import scrapy
from scrapy.crawler import CrawlerProcess
class AftnetSpider(scrapy.Spider):
name = "aftnet"
base_url = "http://www.aftnet.be/MyAFT/Clubs/SearchClubs"
def start_requests(self):
yield scrapy.FormRequest(self.base_url,callback=self.parse,formdata={'regions':'1,3,4,6'})
def parse(self,response):
for items in response.css("dl.club-item"):
for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall():
yield {"result_url":response.urljoin(item)}
if __name__ == "__main__":
c = CrawlerProcess({
'USER_AGENT': 'Mozilla/5.0',
})
c.crawl(AftnetSpider)
c.start()
Однако я намерен добиться того же, используя понимание списка, но я получаю некоторую ошибку.
Использование понимания списка:
def parse(self,response):
return [response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]
Я получаю следующую ошибку:
2019-03-08 12:45:44 [scrapy.core.scraper] ERROR: Spider must return Request, BaseItem, dict or None, got 'str' in <POST http://www.aftnet.be/MyAFT/Clubs/SearchClubs>
Как я могу получить некоторые ссылки, используя списки в scrapy?