爬蟲scrapy框架(4)——yield關(guān)鍵字

t013b9c86f5a43c0037.jpg

yield將方法轉(zhuǎn)換成生成器。我們可以理解成一種特殊的return方法。

  • 我們用items.append(item),然后return items,這種方式是將所有的數(shù)據(jù)獲取出來然后一次性進行處理,這種方式效率十分的低,體現(xiàn)不出框架的優(yōu)勢,而用yield方式,返回生成器,每構(gòu)造一個items就用yield,提升效率。
import scrapy
import re
from myspider.items import MyspiderItem
class MusicspiderSpider(scrapy.Spider):
    name = 'musicspider'#爬蟲識別名稱
    allowed_domains = ['htqyy.com']#爬蟲能夠爬取的網(wǎng)址范圍
    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()#獲取響應(yīng)內(nèi)容
        # open(filename,'wb').write(data)#寫入本地,請求的動作被框架完成
        items=[]# 存放音樂信息的列表
        titles = re.findall(r'target="play" title="(.*?)"',data)#獲取所有歌曲名
        artists = re.findall(r'target="_blank">(.*?)</a>', data)#獲取所有藝術(shù)家

        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返回的是一個生成器,也是可迭代對象,有利于減小服務(wù)器資源,在列表中所有數(shù)據(jù)存入內(nèi)存,而生成器相當(dāng)于一種方法而不是具體的信息,占用內(nèi)存小。
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))

結(jié)果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0
1
2
3
4
5
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容