Возможно ли для scrapy перемещаться по ссылкам до того, как они будут очищены? - PullRequest
0 голосов
/ 18 октября 2018

Я работал над несколькими учебными пособиями по Scrapy, и у меня есть вопрос (я очень новичок в этом, поэтому я прошу прощения, если это глупый вопрос).Большая часть того, что я видел до сих пор, включала в себя:

1) подачу исходного URL-адреса в scrapy

2) указание scrap, какие части страницы нужно захватить

3)сообщая scrapy, как найти «следующую» страницу для очистки из

Что меня интересует, - могу ли я очистить данные с помощью scrapy, когда самих данных нет на стартовой странице?Например, у меня есть ссылка, которая идет на форум.Форум содержит ссылки на несколько подфорумов.Каждый подфорум имеет ссылки на несколько тем.Каждая ветка содержит несколько сообщений (возможно, на нескольких страницах).Сообщения - это то, что я в конечном итоге хочу очистить.Можно ли это сделать и использовать только начальную ссылку на форум?Возможно ли для scrapy проходить через каждый подфорум, и каждый поток и затем начинают очищаться?

1 Ответ

0 голосов
/ 18 октября 2018

Да, вы можете перемещаться без очистки данных, хотя вам нужно будет извлечь ссылки для навигации по правилам xpath или css или CrawlSpider.Эти ссылки можно использовать только для навигации и их не нужно загружать в элементы.

Нет необходимости загружать что-либо в элемент с каждой посещаемой страницы.Рассмотрим сценарий, в котором вам нужно пройти аутентификацию после входа в систему, чтобы получить данные, которые вы хотите очистить.Нет необходимости очищать / передавать / записывать какие-либо данные со страницы входа в систему.

Для ваших целей:

def start_requests(self):
    forum_url = <spam>
    yield scrapy.Request(url=forum_url, callback=self.parse_forum)

def parse_forum(self, response):
    #get the urls
    for u in subforum_urls:
        yield scrapy.Request(url=u, callback=parse_subforum)

def parse_subforum(self, response):
    #get the other urls
    for u in thread_urls:
        yield scrapy.Request(url=u, callback=parse_thread)

def parse_thread(self, response):
    #get the data you want
    yield <the data>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...