Scrapy - 使用选择器嵌套 link 提取
Scrapy - nested link extraction using selectors
我遇到以下问题:有一个网站是爬虫的起点(“起点 URL”)
https://www.example.com
在该页面上,有一个链接列表,我可以使用选择器以这种方式获得:
response.css('div[id=aaaaa][class=bbbbb] a::attr(href)').getall()
在上述命令返回的每个页面中,有一个链接列表,我可以使用选择器以这种方式获得:
response.css('td[class=ccccc] a::attr(href)').getall()
这些是我真正想要抓取的“尾页”。问题是我不认为我可以使用规则来实际地做到这一点,因为链接并没有真正遵循一条规则,比如“Rule(LinkExtractor(allow=('HEREARETHETHINGSYOUWANTLOL.php', ))”,并且我想要的链接是“嵌套”的,可以这么说
基本上我有两个问题:
- 如何让 scrapy 抓取所有“结束链接”
- “结束链接”在“https://www.example.com/aaa/bbb/ccc”格式中不是,它们在“aaa/bbb/ccc" 格式。这会是个问题吗?
为了后代:我设法弄明白了。你就是这样做的:
def parse(self, response):
for sel in response.css('div[id=aaaaa][class=bbbbb] a'):
yield scrapy.Request("https://www.example.com"+sel.css('a::attr(href)').get(), callback=self.parse_2)
def parse_2(self, response):
for sel in response.css('td[class=ccccc] a'):
yield scrapy.Request("https://www.example.com" + sel.css('a::attr(href)').get(), callback=self.parse_3)
def parse_3(self, response):
for stf in response.css('yourelement'):
yield {
'somethingyouactuallywanttoscrape': "etc"
}
我遇到以下问题:有一个网站是爬虫的起点(“起点 URL”)
https://www.example.com
在该页面上,有一个链接列表,我可以使用选择器以这种方式获得:
response.css('div[id=aaaaa][class=bbbbb] a::attr(href)').getall()
在上述命令返回的每个页面中,有一个链接列表,我可以使用选择器以这种方式获得:
response.css('td[class=ccccc] a::attr(href)').getall()
这些是我真正想要抓取的“尾页”。问题是我不认为我可以使用规则来实际地做到这一点,因为链接并没有真正遵循一条规则,比如“Rule(LinkExtractor(allow=('HEREARETHETHINGSYOUWANTLOL.php', ))”,并且我想要的链接是“嵌套”的,可以这么说
基本上我有两个问题:
- 如何让 scrapy 抓取所有“结束链接”
- “结束链接”在“https://www.example.com/aaa/bbb/ccc”格式中不是,它们在“aaa/bbb/ccc" 格式。这会是个问题吗?
为了后代:我设法弄明白了。你就是这样做的:
def parse(self, response):
for sel in response.css('div[id=aaaaa][class=bbbbb] a'):
yield scrapy.Request("https://www.example.com"+sel.css('a::attr(href)').get(), callback=self.parse_2)
def parse_2(self, response):
for sel in response.css('td[class=ccccc] a'):
yield scrapy.Request("https://www.example.com" + sel.css('a::attr(href)').get(), callback=self.parse_3)
def parse_3(self, response):
for stf in response.css('yourelement'):
yield {
'somethingyouactuallywanttoscrape': "etc"
}