Использование scrapy для загрузки контента и сохранения в списке - PullRequest
1 голос
/ 26 февраля 2020

Я пытаюсь загрузить содержимое этой веб-страницы в список, но я новичок в 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

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Я попробовал это:

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!'}]
0 голосов
/ 26 февраля 2020

Я не пробовал, но я думаю, что вы должны вызвать get, вот так:

response.xpath('...').get()

Без скобок вы просто получаете функцию get, а не результаты get.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...