我在 Scrapy 中的蜘蛛遇到了问题。根据搜索键,我抓取了搜索结果页面并找到了链接。但下一个抓取结果页面的yield scrapy.Request() 根本不进入。 我从 main.py 调用蜘蛛,它从参数中获取搜索结果。这是main.py:
def run_spider(key, format):
process = CrawlerProcess(settings={
'FEED_FORMAT': format,
})
process.crawl(mySpider, search_key=key)
process.start()
if __name__ == "__main__":
parser = argparse.ArgumentParser(prog='main.py')
parser.add_argument(
'-s', '--key', required=True)
parser.add_argument('-f', '--format', default='json', choices=['json', 'csv', 'xml'],
help='Output format for scraped data (default: json)')
args = parser.parse_args()
database_manager.create_tables(
models=[SearchKey, SearchResult, Author, Book, BookAuthor])
run_spider(args.key, args.format, path)
这是蜘蛛代码:
def start_requests(self):
search_key = getattr(self, 'search_key', None)
if search_key:
url = base_url + f'?req={search_key}'
new_search = SearchKey.create(search_key=search_key)
search_id = new_search.id
yield scrapy.Request(url, callback=self.parse, meta={'search_id': search_id})
def parse(self, response):
# Extracting search results
search_id = response.meta['search_id']
# some scraping to get search result links
for link in links:
url = base_url + link
yield scrapy.Request(url, callback=self.parse_result) # this line is executed but it doesnt enters the parse_result()
def parse_result(self, response):
# Extracting result
我跟踪了代码,调用 parse_result 的行被执行,但根本没有进入该函数。
我检查了管道和设置,没有发现任何问题。
有人可以帮忙吗?
我找到了 允许的域
该网站有另一个域,在某些时候我将搜索网址更改为该域,但忘记在 allowed_domains 中更改它。