日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

爬蟲一-----beautifulsoup

 印度阿三17 2021-01-31

規(guī)范的書寫爬蟲是十分重要的,如果某個(gè)位置出了問題就跨過去,繼續(xù)執(zhí)行。否則,你洗洗睡了,期待爬蟲在這一頁替你爬取所有信息,但是它卻報(bào)錯(cuò)退出來了。

from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
def GetTitle(url):
    try:
        html=urlopen(url)
    except HTTPError as e:
        return None
    try:
        bsobj=BeautifulSoup(html,"html.parser")#這里要選擇解釋器
        title=bsobj.body.h1
    except AttributeError as e:
        return None
    return title
title=GetTitle("https://hao.lenovo.com.cn/?c=lenovo_oem")
if(title==None):
    print("未找到")
else:
    print(title)

Beatifulsoup中的find()和findall()

 .findAll(tag, attributes, recursive, text, limit, keywords)
 .find(tag, attributes, recursive, text, keywords)

tag標(biāo)簽:可以傳一個(gè)標(biāo)簽的名稱或多個(gè)標(biāo)簽名稱組成的Python列表做標(biāo)簽參數(shù)。
例如,下面的代碼將返回一個(gè)包含HTML文檔中所有標(biāo)題標(biāo)簽的列表:1.findAll({"h1","h2","h3","h4","h5","h6"}
attributes屬性:用一個(gè)字典封裝一個(gè)標(biāo)簽的若干屬性和對應(yīng)的屬性值。例如,下面這個(gè)函數(shù)會(huì)返回HTML文檔里紅色與綠色兩種顏色的span標(biāo)簽:

.findAll("span", {"class":{"green", "red"}

recursive 遞歸 一般情況下默認(rèn)為True,可以手動(dòng)賦False。
如果recursive設(shè)置為True,findAll就會(huì)根據(jù)你的要求去查找標(biāo)簽參數(shù)的所有子標(biāo)簽,以及子標(biāo)簽的子標(biāo)簽。如果recursive設(shè)置為False,findAll就只查找文檔的一級標(biāo)簽
text 文本,根據(jù)文本內(nèi)容進(jìn)行匹配

nameList = bsObj.findAll(text="the prince")

limit,顯然只用于findAll方法。find其實(shí)等價(jià)于findAll的limit等于1時(shí)的情形。如果你只對網(wǎng)頁中獲取的前x項(xiàng)結(jié)果感興趣,就可以設(shè)置它。但是要注意,這個(gè)參數(shù)設(shè)置之后,獲得的前幾項(xiàng)結(jié)果是按照網(wǎng)頁上的順序排序的,未必是你想要的那前幾項(xiàng)
keyword 使用指定屬性來篩選
關(guān)鍵詞參數(shù)的注意事項(xiàng):
雖然關(guān)鍵詞參數(shù)keyword在一些場景中很有用,但是,它是BeautifulSoup在技術(shù)上做的一個(gè)冗余功能。任何用關(guān)鍵詞參數(shù)能夠完成的任務(wù),同樣可以用本章后面將介紹的技術(shù)解決(請參見2.3節(jié)和2.6節(jié))。例如,下面兩行代碼是完全一樣的:

bsObj.findAll(id="text") 
bsObj.findAll("", {"id":"text"})

另外,用keyword偶爾會(huì)出現(xiàn)問題,尤其是在用class屬性查找標(biāo)簽的時(shí)候,因?yàn)閏lass是Python中受保護(hù)的關(guān)鍵字。也就是說,class是Python語言的保留字,在Python程序里是不能當(dāng)作變量或參數(shù)名使用的(和前面介紹的BeautifulSoup.findAll()里的keyword無關(guān))
2。假如你運(yùn)行下面的代碼,Python就會(huì)因?yàn)槟阏`用class保留字而產(chǎn)生一個(gè)語法錯(cuò)誤:

bsObj.findAll(class="green")

不過,你可以用BeautifulSoup提供的有點(diǎn)兒臃腫的方案,在class后面增加一個(gè)下劃線:

bsObj.findAll(class_="green")

另外,你也可以用屬性參數(shù)把class用引號包起來:

bsObj.findAll("", {"class":"green"})

看到這里,你可能會(huì)捫心自問:“現(xiàn)在我是不是已經(jīng)知道如何用標(biāo)簽屬性獲取一組標(biāo)簽了——用字典把屬性傳到函數(shù)里就行了?”
回憶一下前面的內(nèi)容,通過標(biāo)簽參數(shù)tag把標(biāo)簽列表傳到.findAll()里獲取一列標(biāo)簽,其實(shí)就是一個(gè)“或”關(guān)系的過濾器(即選擇所有帶標(biāo)簽1或標(biāo)簽2或標(biāo)簽3…的一列標(biāo)簽)。如果你的標(biāo)簽列表很長,就需要花很長時(shí)間才能寫完。而關(guān)鍵詞參數(shù)keyword可以讓你增加一個(gè)“與”關(guān)系的過濾器來簡化工作。

來源:https://www./content-4-840901.html

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多