Я пытаюсь загрузить содержимое этой веб-страницы в список, но я новичок в scrapy и список возвращается как пустой. Может кто-нибудь помочь мне определить, где ошибка, или что я должен сделать по-другому?
class MySpider(Spider): name = "content_spider" start_urls = ["https://www.finn.no/bap/forsale/ad.html?finnkode=170161842&fbclid=IwAR21cibgw6AY4NE8KHyqVFSs71zz0S60mlmB8Bg-4FEIl56JVqorFtlS6N0"] def parse(self, response): yield response.xpath('/html/body/main/div/div[3]/div[1]/article/section[1]/div[1]/div/div/text()').get() def spider_results(): from scrapy import signals from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings from scrapy.signalmanager import dispatcher results = [] def crawler_results(signal, sender, item, response, spider): results.append(item) dispatcher.connect(crawler_results, signal = signals.item_passed) process = CrawlerProcess(get_project_settings()) process.crawl(MySpider) process.start() return results
Я попробовал это:
from scrapy import Spider from scrapy import signals from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings from scrapy.signalmanager import dispatcher class MySpider(Spider): name = "test" start_urls = ["https://www.finn.no/bap/forsale/ad.html?finnkode=170161842&fbclid=IwAR21cibgw6AY4NE8KHyqVFSs71zz0S60mlmB8Bg-4FEIl56JVqorFtlS6N0"] def parse(self, response): for e in response.xpath('/html/body/main/div/div[3]/div[1]/article/section[1]/div[1]/div/div/text()').getall(): yield {'text': e.strip()} def spider_results(): results = [] def crawler_results(signal, sender, item, response, spider): results.append(item) dispatcher.connect(crawler_results, signal=signals.item_passed) process = CrawlerProcess(get_project_settings()) process.crawl(MySpider) process.start() print(results) spider_results()
Это сработало. Потерянный во многих выходных я получил это:
[{'text': 'Pent brukt 1 år gammelt spisebord selges. Det er et lite merke i lakken i bordplaten, ellers i helt fin stand. Ny pris kr. 4995. Må hentes sentralt på Tromsøya. Stolene følger dessverre ikke med!'}]
Я не пробовал, но я думаю, что вы должны вызвать get, вот так:
response.xpath('...').get()
Без скобок вы просто получаете функцию get, а не результаты get.