如何抓取每个主题下的每一页
How to scrape every page under every topic
我需要抓取每个类别下的每个页面。
目前我可以进入列表类别并抓取下一页之后的每一页。我想做的是,我想进入一个类别,抓取该类别中的每个页面,一旦完成,我想进入下一个类别并做同样的事情。有时某些类别还嵌套了其他类别。
例如; https://www.amazon.com/best-sellers-books-Amazon/zgbs/books/ref=zg_bs_unv_b_1_173508_2(<- 这些是书籍列表)左侧有类别(艺术与摄影、有声有声读物......)在每个类别下例如艺术与摄影类别下有更多类别( Architecture, Business of Art, ...) 然后在 Architecture 下有更多类别(Buildings, Criticism,...) Buildings(Landmarks & Monuments, Religious Buildings,..)根节点,它有 100 页的列表。所以我想做什么我想进入艺术与摄影并继续在每个子类别下进行直到我找到一个根节点并为每个页面抓取所有列表然后在我完成我想要回滚的每个兄弟节点后转到兄弟节点进入宗教建筑完成回滚进入建筑下的下一类别完成建筑下的每个类别回滚进入批评......等等。所以几乎把亚马逊列出的每个子类别下的每本书都刮掉了。
现在我有这个逻辑来处理 start_urls 中给出的类别中的每个页面。 (注意:我不能真正列出开始 urls 列表中的每个类别,因为它们太多了)下面的代码有效并抓取开始 [=] 中给出的一个类别下列出的每个页面21=]。我需要的是如何让它自动跳转到下一个子类别并在完成卷土重来并转到下一个子类别后做同样的事情......等等
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
有人能帮忙吗??
谢谢
以简单的方式,您可以提供要抓取的每个类别的网址,
并将其输入 start_urls
start_url=['http://url_category1.html,http://url_category2.html,http://url_category3.html']
这是一种方式。
或者您可以使用每个类别中的 href 提出自己的请求,
此致
实现此目的的一种方法是使用两种解析方法:一种用于提取后续链接,另一种用于抓取这些页面上的内容:
from scrapy import Request
# start_urls = ...
def parse(self, response):
# use XPath or whatever to get the links to follow
for link in links_to_follow:
yield Request(link, callback=self.parse_next)
def parse_next(self, response):
# actually do the parsing
您甚至可以在一页上部分填充项目,将 Request
存储到页面以跟随该项目的元数据,并在下一页上填充项目的其余部分,将其交给管道.
您可以阅读更多相关内容 here。
我需要抓取每个类别下的每个页面。 目前我可以进入列表类别并抓取下一页之后的每一页。我想做的是,我想进入一个类别,抓取该类别中的每个页面,一旦完成,我想进入下一个类别并做同样的事情。有时某些类别还嵌套了其他类别。
例如; https://www.amazon.com/best-sellers-books-Amazon/zgbs/books/ref=zg_bs_unv_b_1_173508_2(<- 这些是书籍列表)左侧有类别(艺术与摄影、有声有声读物......)在每个类别下例如艺术与摄影类别下有更多类别( Architecture, Business of Art, ...) 然后在 Architecture 下有更多类别(Buildings, Criticism,...) Buildings(Landmarks & Monuments, Religious Buildings,..)根节点,它有 100 页的列表。所以我想做什么我想进入艺术与摄影并继续在每个子类别下进行直到我找到一个根节点并为每个页面抓取所有列表然后在我完成我想要回滚的每个兄弟节点后转到兄弟节点进入宗教建筑完成回滚进入建筑下的下一类别完成建筑下的每个类别回滚进入批评......等等。所以几乎把亚马逊列出的每个子类别下的每本书都刮掉了。
现在我有这个逻辑来处理 start_urls 中给出的类别中的每个页面。 (注意:我不能真正列出开始 urls 列表中的每个类别,因为它们太多了)下面的代码有效并抓取开始 [=] 中给出的一个类别下列出的每个页面21=]。我需要的是如何让它自动跳转到下一个子类别并在完成卷土重来并转到下一个子类别后做同样的事情......等等
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
有人能帮忙吗?? 谢谢
以简单的方式,您可以提供要抓取的每个类别的网址, 并将其输入 start_urls
start_url=['http://url_category1.html,http://url_category2.html,http://url_category3.html']
这是一种方式。
或者您可以使用每个类别中的 href 提出自己的请求,
此致
实现此目的的一种方法是使用两种解析方法:一种用于提取后续链接,另一种用于抓取这些页面上的内容:
from scrapy import Request
# start_urls = ...
def parse(self, response):
# use XPath or whatever to get the links to follow
for link in links_to_follow:
yield Request(link, callback=self.parse_next)
def parse_next(self, response):
# actually do the parsing
您甚至可以在一页上部分填充项目,将 Request
存储到页面以跟随该项目的元数据,并在下一页上填充项目的其余部分,将其交给管道.
您可以阅读更多相关内容 here。