我需要抓取每个类别下的每一页。目前,我能够进入列表类别并抓取下一页后面的每一页。我想做的是,我想进入一个类别,抓取该类别中的每一页,一旦完成,我想进入下一个类别并做同样的事情。有时某些类别中嵌套了其他类别。
例如; https://www.amazon.com/best-sellers-books-Amazon/zgbs/books/ref=zg_bs_unv_b_1_173508_2(<- 这些是书籍列表)例如左侧有类别(艺术与摄影、有声有声读物……)在每个类别下,例如在艺术与摄影类别下,还有更多类别(建筑、艺术商业,...)然后在建筑下有更多类别(建筑,批评,...)在建筑(地标和纪念碑,宗教建筑,..)下,一旦你到达地标和纪念碑,那就是根节点,它有100 页的列表。所以我想做的我想去艺术和 摄影并继续在每个子类别下进行,直到我点击一个根节点并刮掉每个页面的所有列表,然后在我完成每个要回滚的兄弟节点后转到兄弟节点并进入宗教建筑完成该回滚进入下一个类别在建筑物下完成建筑物下的每个类别回滚进入批评......等等。所以几乎刮掉了亚马逊列出的每个子类别下的每一本书。
现在我有这个逻辑来完成 start_urls 中给出的类别中的每个页面。; (注意:我不能真正列出开始 url 列表中的每个类别,因为它们太多了)下面的代码可以工作并抓取在开始 url 中给出的一个类别下列出的每个页面。我需要的是如何制作它的想法,以便它自动跳转到下一个子类别并在完成复出并进入下一个子类别后执行相同的操作......等等
name = "my_crawler"
allowed_domains = ["somewebsite.com"]
start_urls = [
"someurl.....",
]
rules = (Rule(LinkExtractor(allow=(), restrict_xpaths=('//a[@class="pagnNext"]',)), callback="parse_page", follow= True),)
def parse_page(self, response):
asds = Selector(response).xpath('//span[contains(@class,"price")]/text()').extract()
for asd in asds:
item['fsd'] = asd.xpath('@title').extract()[0]
yield item
有人可以帮忙吗??谢谢