美文网首页
爬虫scrapy框架(4)——yield关键字

爬虫scrapy框架(4)——yield关键字

作者: 猛犸象和剑齿虎 | 来源:发表于2019-05-29 05:21 被阅读0次
    t013b9c86f5a43c0037.jpg

    yield将方法转换成生成器。我们可以理解成一种特殊的return方法。

    • 我们用items.append(item),然后return items,这种方式是将所有的数据获取出来然后一次性进行处理,这种方式效率十分的低,体现不出框架的优势,而用yield方式,返回生成器,每构造一个items就用yield,提升效率。
    import scrapy
    import re
    from myspider.items import MyspiderItem
    class MusicspiderSpider(scrapy.Spider):
        name = 'musicspider'#爬虫识别名称
        allowed_domains = ['htqyy.com']#爬虫能够爬取的网址范围
        start_urls = ['http://www.htqyy.com/top/musicList/hot?pageIndex=0&pageSize=20']#爬取的起始url
    
        def parse(self, response):
            # filename='music.html'
            data= response.body.decode()#获取响应内容
            # open(filename,'wb').write(data)#写入本地,请求的动作被框架完成
            items=[]# 存放音乐信息的列表
            titles = re.findall(r'target="play" title="(.*?)"',data)#获取所有歌曲名
            artists = re.findall(r'target="_blank">(.*?)</a>', data)#获取所有艺术家
    
            for i in range(0,len(titles)):
                item=MyspiderItem()
                item["title"]=titles[i]
                item["artist"] = artists[i]
                yield item
    
                # items.append(item)
            # return items
    

    yield 入门

    • yield返回的是一个生成器,也是可迭代对象,有利于减小服务器资源,在列表中所有数据存入内存,而生成器相当于一种方法而不是具体的信息,占用内存小。
    def f1():
        list=[]
        for i in range(10):
            list.append(i)
        return list
    def f2():
        for i in range(10):
            yield i
    
    print(f1())
    gen=f2()
    print(next(gen))
    print(next(gen))
    print(next(gen))
    print(next(gen))
    print(next(gen))
    print(next(gen))
    

    结果:

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    0
    1
    2
    3
    4
    5
    

    相关文章

      网友评论

          本文标题:爬虫scrapy框架(4)——yield关键字

          本文链接:https://www.haomeiwen.com/subject/xmfqtctx.html