Python Scrapy-使用第一个URL的结果来刮取多个URL 我使用Scrapy从第一个URL中提取数据 第一个URL返回一个包含URL列表的响应

Python Scrapy-使用第一个URL的结果来刮取多个URL 我使用Scrapy从第一个URL中提取数据 第一个URL返回一个包含URL列表的响应,python,scrapy,scrapy-spider,Python,Scrapy,Scrapy Spider,到目前为止我还可以。我的问题是,我怎样才能进一步抓取这个URL列表?搜索之后,我知道我可以在解析中返回请求,但它似乎只能处理一个URL 这是我的分析: def parse(self, response): # Get the list of URLs, for example: list = ["http://a.com", "http://b.com", "http://c.com"] return scrapy.Request(list[0]) # It wo

到目前为止我还可以。我的问题是,我怎样才能进一步抓取这个URL列表?搜索之后,我知道我可以在解析中返回请求,但它似乎只能处理一个URL

这是我的分析:

def parse(self, response):
    # Get the list of URLs, for example:
    list = ["http://a.com", "http://b.com", "http://c.com"]
    return scrapy.Request(list[0])
    # It works, but how can I continue b.com and c.com?
我可以这样做吗

def parse(self, response):
    # Get the list of URLs, for example:
    list = ["http://a.com", "http://b.com", "http://c.com"]

    for link in list:
        scrapy.Request(link)
        # This is wrong, though I need something like this
完整版本:

import scrapy

class MySpider(scrapy.Spider):
    name = "mySpider"
    allowed_domains = ["x.com"]
    start_urls = ["http://x.com"]

    def parse(self, response):
        # Get the list of URLs, for example:
        list = ["http://a.com", "http://b.com", "http://c.com"]

        for link in list:
            scrapy.Request(link)
            # This is wrong, though I need something like this

为此,您需要对scrapy.spider进行子类化,并定义一个URL列表。然后,Scrapy将自动跟踪它找到的链接

就这样做吧:

import scrapy

class YourSpider(scrapy.Spider):
    name = "your_spider"
    allowed_domains = ["a.com", "b.com", "c.com"]
    start_urls = [
        "http://a.com/",
        "http://b.com/",
        "http://c.com/",
    ]

    def parse(self, response):
        # do whatever you want
        pass

您可以找到有关Scrapy的详细信息。

为此,您需要对Scrapy.spider进行子类化,并定义一个URL列表。然后,Scrapy将自动跟踪它找到的链接

就这样做吧:

import scrapy

class YourSpider(scrapy.Spider):
    name = "your_spider"
    allowed_domains = ["a.com", "b.com", "c.com"]
    start_urls = [
        "http://a.com/",
        "http://b.com/",
        "http://c.com/",
    ]

    def parse(self, response):
        # do whatever you want
        pass

您可以找到有关Scrapy的更多信息。

我想您需要的是收益率声明:

def parse(self, response):
    # Get the list of URLs, for example:
    list = ["http://a.com", "http://b.com", "http://c.com"]

    for link in list:
        request = scrapy.Request(link)
        yield request

我想你要找的是收益率声明:

def parse(self, response):
    # Get the list of URLs, for example:
    list = ["http://a.com", "http://b.com", "http://c.com"]

    for link in list:
        request = scrapy.Request(link)
        yield request
这应该行得通


这应该行得通

如果你这样做有什么问题吗?@huguesfontelle第一个行得通,但我想循环列表并请求列表中的每个URL如果你这样做有什么问题吗?@huguesfontelle第一个行得通,但是我想循环列表并请求列表中的每个URL我不知道列表中有哪些URL,而且列表不是静态的。首先我需要运行scrapy来获取列表。我该怎么做?您在问题中指出,您希望进一步删除第一个URL指向的网页中找到的URL列表。但Scrapy会自动为您执行此操作。它将跟随它找到的每个URL,您不需要获取此URL列表。所以我不确定是否能很好地理解您的需求。我用更多的代码更新了我的问题,希望它会更清晰。我需要从
x.com
开始。之后,我得到一个响应,并从中提取一个URL列表。我需要从列表中删除这些URL。我不知道列表中有什么,列表的内容会随着时间的推移而改变。我对Scrapy是新手,希望我不要提出愚蠢的问题。我不知道列表中有什么URL,而且列表不是静态的。首先我需要运行scrapy来获取列表。我该怎么做?您在问题中指出,您希望进一步删除第一个URL指向的网页中找到的URL列表。但Scrapy会自动为您执行此操作。它将跟随它找到的每个URL,您不需要获取此URL列表。所以我不确定是否能很好地理解您的需求。我用更多的代码更新了我的问题,希望它会更清晰。我需要从
x.com
开始。之后,我得到一个响应,并从中提取一个URL列表。我需要从列表中删除这些URL。我不知道列表中有什么,列表的内容会随着时间的推移而改变。我是Scrapy的新手,希望我不要提出愚蠢的问题。如果其他人遇到这个问题并且仍然有问题(就像我一样),Scrapy.Request使用的回调将默认为原始解析函数。您可以通过将其传递到
scrapy.Request(link,callback=newCallback)
中来设置不同的回调函数。如果其他人遇到此问题并且仍然存在问题(如我所做的),scrapy.Request使用的回调函数将默认为原始解析函数。通过将回调函数传递到
scrapy.Request(link,callback=newCallback)