首先,我想提一提我是一名学生,并且在这方面知识不多。
我正在尝试使用scrapy创建Web搜寻器的Python演练。
工作正常,但要求之一是我只检索前10个项目,即使使用自定义设置也无法实现:
custom_settings = {
'CONCURRENT_REQUESTS': 1,
'CONCURRENT_ITEMS' :1,
'CLOSESPIDER_PAGECOUNT': 1,
'CLOSESPIDER_ITEMCOUNT': 10
}
您能帮我找到解决方案吗?
谢谢!
代码:
import scrapy
from scrapy.crawler import CrawlerProcess
class sjr_spider(scrapy.Spider):
name = "sjr_spider"
start_urls = [
"https://www.scimagojr.com/journalrank.php?year=2017&area=1700"
]
custom_settings = {
'CONCURRENT_REQUESTS': 1,
'CONCURRENT_ITEMS' :1,
'CLOSESPIDER_PAGECOUNT': 1,
'CLOSESPIDER_ITEMCOUNT': 10
}
def parse(self, response):
for journal in response.xpath('//td[@class="tit"]/a/text()'):
yield {
'title': journal.extract()
}
if __name__ == "__main__":
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
'DOWNLOAD_HANDLERS': {'s3': None},
'LOG_ENABLED': True,
})
process.crawl(sjr_spider)
process.start()
答案 0 :(得分:0)
正如Stan在评论中指出的那样,您的设置导致蜘蛛程序停止,但在蜘蛛程序停止之前,它会处理队列中的请求。
如果您确实需要丢弃超过10个项目,可以create an item pipeline执行。它可以计数项目,也可以在10号之后删除任何项目。
不过,您仍然应该保持ITEM_CLOSESPIDER
的设置,以确保第10个项目之后蜘蛛开始停止。