Scrapy 从其他链接获取值
Scrapy getting values from other links
def parse(self, response):
list = {
"name": response.css("#title::text").extract_first(),
"images": []
}
for image in response.css("#images_link a::attr(href)").extract():
list["images"].append(yield scrapy.Request(url=image, callback=self.parse_image))
yield list
def parse_image(self, response):
return [response.css("img::attr(alt)").extract(), response.css("img::attr(src)").extract()]
我想抓取一个页面并抓取它的一些子链接并将它们附加到 list
的主要对象,但它 returns 返回许多对象而不是一个
怎么做才对?
最好将“列表”重命名为其他名称。
请求不能那样工作,您需要传递项目(示例中的“dict1”)。
这是一个例子(因为你没有提供网站的 url 我无法检查,但我希望你明白了):
import scrapy
class ExampleSpider(scrapy.Spider):
name = "exampleSpider"
start_urls = ['https://www.example.com']
def parse(self, response):
dict1 = {
"name": response.css("#title::text").get(),
"images": []
}
images_urls = response.css("#images_link a::attr(href)").getall()
if images_urls:
scrapy.Request(url=images_urls[0],
callback=self.parse_image,
cb_kwargs={'dict1': dict1, 'images_urls': images_urls[1:]})
def parse_image(self, response, dict1, images_urls):
if images_urls:
dict1['images'].append([response.css("img::attr(alt)").getall(), response.css("img::attr(src)").getall()])
scrapy.Request(url=images_urls[0],
callback=self.parse_image,
cb_kwargs={'dict1': dict1, 'images_urls': images_urls[1:]})
else:
yield dict1
阅读这些:
request objects,
passing additional data to callback functions
def parse(self, response):
list = {
"name": response.css("#title::text").extract_first(),
"images": []
}
for image in response.css("#images_link a::attr(href)").extract():
list["images"].append(yield scrapy.Request(url=image, callback=self.parse_image))
yield list
def parse_image(self, response):
return [response.css("img::attr(alt)").extract(), response.css("img::attr(src)").extract()]
我想抓取一个页面并抓取它的一些子链接并将它们附加到 list
的主要对象,但它 returns 返回许多对象而不是一个
怎么做才对?
最好将“列表”重命名为其他名称。
请求不能那样工作,您需要传递项目(示例中的“dict1”)。
这是一个例子(因为你没有提供网站的 url 我无法检查,但我希望你明白了):
import scrapy
class ExampleSpider(scrapy.Spider):
name = "exampleSpider"
start_urls = ['https://www.example.com']
def parse(self, response):
dict1 = {
"name": response.css("#title::text").get(),
"images": []
}
images_urls = response.css("#images_link a::attr(href)").getall()
if images_urls:
scrapy.Request(url=images_urls[0],
callback=self.parse_image,
cb_kwargs={'dict1': dict1, 'images_urls': images_urls[1:]})
def parse_image(self, response, dict1, images_urls):
if images_urls:
dict1['images'].append([response.css("img::attr(alt)").getall(), response.css("img::attr(src)").getall()])
scrapy.Request(url=images_urls[0],
callback=self.parse_image,
cb_kwargs={'dict1': dict1, 'images_urls': images_urls[1:]})
else:
yield dict1
阅读这些: request objects, passing additional data to callback functions