Я хочу, чтобы scrapy очищала некоторые стартовые URL-адреса, а затем следила за ссылками на этих страницах в соответствии с правилами. Мой паук унаследован от CrawlSpider
и имеет start_urls
и «правила». Но, похоже, не используется функция синтаксического анализа, которую я определяю, чтобы разобрать start_urls. Вот коды:Какой метод анализа синтаксического анализа используется для разбора start_urls
<!-- language: lang-python -->
class ZhihuSpider(CrawlSpider):
start_urls = ["https://www.zhihu.com/topic/19778317/organize/entire",
"https://www.zhihu.com/topic/19778287/organize/entire"]
rules = (Rule(LinkExtractor(allow= (r'topic/\d+/organize/entire')), \
process_request='request_tagInfoPage', callback = 'parse_tagPage'))
# this is the parse_tagPage() scrapy should use to scrape
def parse_tagPage():
print("start scraping!") # Explicitly print to show that scraping starts
# do_something
Однако консоль показывает, что scrapy сканирует start_urls, но ничего не печатается. Поэтому я уверен, что функция parse_tagPage() не вызывается. Несмотря на то, что scrapy показывает, что URL-адреса сканируются [scrapy] DEBUG: Crawled (200) <GET https://www.zhihu.com/topic/19778317/organize/entire> (referer: http://www.zhihu.com)
Любые намеки на то, почему это произойдет и как настроить scrapy для использования parse_tagPage()?
Вы должны прочитать документацию, когда вы укажете start_urls, scrapy посетит этот url с помощью метода start_request(), а затем увидит, совпадает ли он с указанными вами правилами, если он соответствует правилу, он посетит метод parse_tagPage() else ничего не сделает (вы можете определить метод обратного вызова по умолчанию, если не согласовано правило) http://doc.scrapy.org/en/latest/topics/spiders.html?highlight=start%20request#scrapy.spiders.Spider .start_requests – MrPandav
Вы можете ответить на свой вопрос, а затем принять свой ответ вместо редактирования вопроса с ответом. –
Спасибо, Бурхан! Не знал этого. – Skywalker326