python - Scrapy,将start_url绑定(bind)到特定的解析项,以便可以依次解析它们

标签 python scrapy

你好!我遇到了一些问题,我试图弄清楚如何为crawlspider类中的特定parse_item方法设置起始url。

假设我有多个起始网址,为了简单起见,有两个。

所以:start_urls = ["www.website1.com","www.website2.com"]

现在假设我有两个名为 parse_item1 和 parse_item2 的解析函数。

我已经将 parse_item1 设置为对 parse_item2 进行回调,反之亦然。

所以它们确实按照彼此的顺序运行。

现在我遇到了一些问题,我想依次检查每个 start_url。

如下:示例1,示例2,示例1,示例2。 不是:示例1、示例1、示例2、示例2、示例2、示例1。

我想我应该使用两个 parse_item 函数来做到这一点,但现在我遇到了问题。

尽管他们仍然按顺序互相调用,但他们往往不会按顺序调用每个起始网址。

所以我的问题是,是否可能,如果可能,我如何将例如 www.example1.com 绑定(bind)到 parse_item1 和 www.example2.com 到 parse_item2,这样它们就会被一个接一个地调用。

class juggler(CrawlSpider):

name = "juggle"
allowed_domains = ["example1.com","example2.com"]
start_urls = ["http://www.example1.com/","http://www.example2.com/"]
rules = [
    Rule(LinkExtractor(),callback="parse_all",follow=False)
    ]



def parse_all(self,response):
    yield self.parse_item1(response) 
    yield self.parse_item2(response)

def parse_item1(self,response):
    time.sleep(1)
    item = TwolaircrawlerItem()
    print "Item 1!"
    link = response.url
    print link
    return Request(url=link,callback="self.parse_item2")


def parse_item2(self,response):
    time.sleep(1)
    item = TwolaircrawlerItem()
    print "Item 2!"
    link = response.url
    print link
    return Request(url=link,callback="self.parse_item1")

最佳答案

默认情况下没有保证顺序,这就是Scrapy的工作原理。

如果您需要按照严格的顺序一一处理请求,则需要手动维护一个请求队列,如下所示:

关于python - Scrapy,将start_url绑定(bind)到特定的解析项,以便可以依次解析它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333685/

相关文章:

python - 在 PyQT4 程序中无法获得多语言支持

python - 将文件名添加到数据框中的列标题

python - Scrapy 和封装

python - 将从浏览器获取的 XPath 转换为 Scrapy 可用的 XPath

unicode - Scrappy 的方法 re() 不适用于 Unicode 字符串

python - 将类应用于列表中的项目

python - 如何在 Python 中打印出 http-response header

python - 如何为我的 python 脚本创建一个本地网络服务器?

scrapy - 在 scrapyd 中启用 HttpProxyMiddleware

javascript - Lua、Scrapy/Splash : Clicking button with no href