python抓取多種類型的頁(yè)面方法實(shí)例
與抓取預(yù)定義好的頁(yè)面集合不同,抓取一個(gè)網(wǎng)站的所有內(nèi)鏈會(huì)帶來(lái)一個(gè) 挑戰(zhàn),即你不知道會(huì)獲得什么。好在有幾種基本的方法可以識(shí)別頁(yè)面類型。
通過(guò)URL
一個(gè)網(wǎng)站中所有的博客文章可能都會(huì)包含一個(gè) URL(例如 http://example.com/blog/title-of-post)。
通過(guò)網(wǎng)站中存在或者缺失的特定字段
如果一個(gè)頁(yè)面包含日期,但是不包含作者名字,那你可以將其歸類 為新聞稿。如果它有標(biāo)題、主圖片、價(jià)格,但是沒(méi)有主要內(nèi)容,那么它 可能是一個(gè)產(chǎn)品頁(yè)面。
通過(guò)頁(yè)面中出現(xiàn)的特定標(biāo)簽識(shí)別頁(yè)面
即使不抓取某個(gè)標(biāo)簽內(nèi)的數(shù)據(jù),你仍然可以利用這個(gè)標(biāo)簽。你的爬 蟲(chóng)可以尋找類似于 <div id="related-products"> 這樣的元素來(lái)識(shí) 別產(chǎn)品頁(yè)面,即便是爬蟲(chóng)對(duì)相關(guān)產(chǎn)品的內(nèi)容并不感興趣。
為了跟蹤多個(gè)頁(yè)面類型,你需要在 Python 中有多個(gè)類型的頁(yè)面對(duì)象。 這通過(guò)兩種方式來(lái)實(shí)現(xiàn)。
如果頁(yè)面都是相似的(它們基本上都是相同類型的內(nèi)容),你可能需要 在現(xiàn)有的網(wǎng)頁(yè)對(duì)象中加入一個(gè) pageType 屬性:
class Website: """所有文章/網(wǎng)頁(yè)的共同基類""" def __init__(self, type, name, url, searchUrl, resultListing, resultUrl, absoluteUrl, titleTag, bodyTag): self.name = name self.url = url self.titleTag = titleTag self.bodyTag = bodyTag self.pageType = pageType
如果你在一個(gè)類 SQL 的數(shù)據(jù)庫(kù)中對(duì)這些頁(yè)面進(jìn)行排序,這種模式類型 意味著這些頁(yè)面應(yīng)該被存放在同一張表中,并且加入一個(gè)額外的 pageType 列。
如果你抓取的頁(yè)面或內(nèi)容各不相同(它們包含不同類型的字段),就需 要為每個(gè)頁(yè)面類型創(chuàng)建一個(gè)新的對(duì)象。當(dāng)然,有些東西是所有網(wǎng)頁(yè)共有 的——它們都有一個(gè) URL,也可能都有一個(gè)名稱或者頁(yè)面標(biāo)題。這種 情況非常適合用子類:
class Website: """所有文章/網(wǎng)頁(yè)的共同基類""" def __init__(self, name, url, titleTag): self.name = name self.url = url self.titleTag = titleTag
這不是一個(gè)由你的爬蟲(chóng)直接使用的對(duì)象,而是將被你的頁(yè)面類型引用的 對(duì)象:
class Product(Website): """產(chǎn)品頁(yè)面要抓取的信息""" def __init__(self, name, url, titleTag, productNumber, price): Website.__init__(self, name, url, TitleTag) self.productNumberTag = productNumberTag self.priceTag = priceTag class Article(Website): """文章頁(yè)面要抓取的信息""" def __init__(self, name, url, titleTag, bodyTag, dateTag): Website.__init__(self, name, url, titleTag) self.bodyTag = bodyTag self.dateTag = dateTag
這個(gè)產(chǎn)品頁(yè)面擴(kuò)展了Website基類,并且加入了僅適用于產(chǎn)品的productNumber和price屬性,而Article類加入了body和date屬性,這兩個(gè)屬性是不適用于產(chǎn)品的。
你可以用這兩個(gè)類去抓取一個(gè)商店網(wǎng)站,該網(wǎng)站除了產(chǎn)品,可能還包含博客文章或新聞稿。
希望以上知識(shí)點(diǎn)能夠幫助到大家,感謝大家對(duì)腳本之家的支持。
相關(guān)文章
Gauss-Seidel迭代算法的Python實(shí)現(xiàn)詳解
這篇文章主要介紹了Gauss-Seidel迭代算法的Python實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-06-06
Python進(jìn)階-函數(shù)默認(rèn)參數(shù)(詳解)
下面小編就為大家?guī)?lái)一篇Python進(jìn)階-函數(shù)默認(rèn)參數(shù)(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Python中的?Numpy?數(shù)組形狀改變及索引切片
這篇文章主要介紹了Python中的?Numpy?數(shù)組形狀改變及索引切片,Numpy提供了一個(gè)reshape()方法,它可以改變數(shù)組的形狀,返回一個(gè)新的數(shù)組,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章2022-05-05
python開(kāi)發(fā)任意表達(dá)式求值全功能示例
這篇文章主要為大家介紹了python開(kāi)發(fā)任意表達(dá)式求值全功能示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Python語(yǔ)音合成之第三方庫(kù)gTTs/pyttsx3/speech橫評(píng)(內(nèi)附使用方法)
Python是一種非常強(qiáng)大的腳本語(yǔ)言,可以用來(lái)實(shí)現(xiàn)各種復(fù)雜的應(yīng)用,其中之一就是文本轉(zhuǎn)語(yǔ)音,即把文字轉(zhuǎn)換成聲音來(lái)發(fā)出,下面這篇文章主要給大家介紹了關(guān)于Python語(yǔ)音合成之第三方庫(kù)gTTs/pyttsx3/speech橫評(píng)的相關(guān)資料,文中還介紹了詳細(xì)的使用方法,需要的朋友可以參考下2023-05-05

