首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从for循环转到下面的链接?

如何从for循环转到下面的链接?
EN

Stack Overflow用户
提问于 2019-04-27 14:56:00
回答 1查看 46关注 0票数 0

我正在使用scrapy报废一个网站,我在一个循环中,每个项目都有我想去的链接,每次在循环中。

代码语言:javascript
运行
复制
import scrapy


class MyDomainSpider(scrapy.Spider):
    name = 'My_Domain'
    allowed_domains = ['MyDomain.com']
    start_urls = ['https://example.com'] 

    def parse(self, response):
        Colums = response.xpath('//*[@id="tab-5"]/ul/li')
        for colom in Colums:
            title = colom.xpath('//*[@class="lng_cont_name"]/text()').extract_first()  
            address = colom.xpath('//*[@class="adWidth cont_sw_addr"]/text()').extract_first()
            con_address = address[9:-9]  
            url= colom.xpath('//*[@id="tab-5"]/ul/li/@data-href').extract_first() 
            print(url)
            print('*********************')    
            yield scrapy.Request(url, callback = self.parse_dir_contents)



    def parse_dir_contents(self, response):
        print('000000000000000000')
        a = response.xpath('//*[@class="fn"]/text()').extract_first()   

        print(a)

我尝试过这样的方法,但是0只打印了一次,但是星号打印了10次,我想让它运行第二个函数,让它在每次循环运行时运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 15:29:00

您可能正在做一些不是故意的事情。使用

代码语言:javascript
运行
复制
url = colom.xpath('//*[@id="tab-5"]/ul/li/@data-href').extract_first()

在循环中,url总是产生相同的值。默认情况下,Scrapy会过滤重复请求(请参阅here)。如果你真的想要多次抓取同一个网址,你可以使用scrapy.Request构造函数的dont_filter=True参数来禁用请求级别的过滤。然而,我认为您真正想要的是这样(只剩下代码的相关部分):

代码语言:javascript
运行
复制
def parse(self, response):
    Colums = response.xpath('//*[@id="tab-5"]/ul/li')
    for colom in Colums:
        url = colom.xpath('./@data-href').extract_first() 
        yield scrapy.Request(url, callback=self.parse_dir_contents)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55878092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档