相關(guān)模塊的安裝
- 1.安裝
requests
模塊获搏,在終端輸入pip install requests
命令首装。使用requests
模塊進(jìn)行http請(qǐng)求圈盔,同時(shí)導(dǎo)入HTMLParser和re模塊囤屹。
為了解決編碼帶來(lái)的困擾粟焊,默認(rèn)使用utf8編碼琅捏。
解析網(wǎng)頁(yè)內(nèi)容
1.網(wǎng)頁(yè)的url是
http://www.gushiwen.org/gushi/tangshi.aspx
,該網(wǎng)頁(yè)是個(gè)唐詩(shī)300首網(wǎng)頁(yè)生百,里面有唐詩(shī)300首的標(biāo)題和作者,點(diǎn)擊某首唐詩(shī)進(jìn)入其具體內(nèi)容網(wǎng)頁(yè)柄延。我們想要抓取的內(nèi)容是標(biāo)題蚀浆、作者、內(nèi)容搜吧。-
2.利用谷歌的chrome瀏覽器查看網(wǎng)頁(yè)源代碼市俊。需要抓取的源代碼如下:
打開(kāi)其中的一個(gè)div標(biāo)簽,顯示如下:
所以我們先抓取外層的div標(biāo)簽滤奈,這幾個(gè)并列的div標(biāo)簽都有一個(gè)class屬性為guwencont2,識(shí)別出外層的標(biāo)簽后就可以抓取內(nèi)層的a標(biāo)簽的內(nèi)容摆昧,包含古詩(shī)的標(biāo)題和作者。還需要抓取該古詩(shī)的url,即為href屬性值蜒程,例如/GuShiWen_6299b969fb.aspx
绅你,該內(nèi)容拼接原始url為http://www.gushiwen.org
成http://www.gushiwen.org/GuShiWen_6299b969fb.aspx
即為具體內(nèi)容網(wǎng)頁(yè)。 -
3.來(lái)到古詩(shī)的具體內(nèi)容網(wǎng)頁(yè)昭躺,同樣利用chrome的開(kāi)發(fā)者工具顯示源代碼忌锯,顯示如下:
內(nèi)容在p標(biāo)簽中,有一個(gè)align屬性為center领炫。
4.分析完如何解析出標(biāo)題作者和內(nèi)容后偶垮,開(kāi)始寫(xiě)代碼。自定義一個(gè)解釋器繼承
HTMLParser
,在重寫(xiě)初始化函數(shù)__init__
時(shí)要先初始化父類(lèi)
HTMLParser.__init__(self)
在初始化函數(shù)中定義一個(gè)字典帝洪,用于存儲(chǔ)爬取到的標(biāo)題作者和內(nèi)容(1首詩(shī)對(duì)應(yīng)一個(gè)字典)似舵,定義一個(gè)列表用于存儲(chǔ)字典(列表中存儲(chǔ)所有詩(shī)對(duì)應(yīng)的字典)。定義幾個(gè)標(biāo)志位(用于標(biāo)記上面分析的幾個(gè)需要找到的標(biāo)簽)碟狞,以及一個(gè)正則表達(dá)式(用于分離標(biāo)題和作者)
-
定義一個(gè)解析屬性函數(shù),html標(biāo)簽中的屬性和屬性值在htmlparser解析器中是個(gè)tuple類(lèi)型婚陪,返回屬性名對(duì)應(yīng)的屬性值族沃。
-
重寫(xiě)handle_starttag函數(shù),該函數(shù)在查找到標(biāo)簽頭自動(dòng)調(diào)用,attrs包含該標(biāo)簽tag中所有的屬性和屬性值,類(lèi)型是個(gè)列表,其中的元素都是tuple類(lèi)型(屬性名脆淹,屬性值)常空。
-
重寫(xiě)handle_endtag函數(shù),該函數(shù)在查找到標(biāo)簽?zāi)┪蛔詣?dòng)調(diào)用
-
重寫(xiě)handle_data函數(shù),該函數(shù)在查找到標(biāo)簽中的內(nèi)容自動(dòng)調(diào)用盖溺,利用正則表達(dá)式進(jìn)行了匹配漓糙,如果匹配成功,匹配出來(lái)的組即為標(biāo)題和作者烘嘱。
- 5.實(shí)例化上面寫(xiě)的SongciParser類(lèi)昆禽,傳入原始url,使用
requests
獲得響應(yīng)蝇庭,把響應(yīng)的內(nèi)容喂給實(shí)例化的解析器醉鳖。
在主函數(shù)中執(zhí)行如下代碼
解析具體網(wǎng)頁(yè)的內(nèi)容
-
1.經(jīng)過(guò)上面的解析,已經(jīng)可以解析出唐詩(shī)300首的標(biāo)題和作者哮内,并且獲得了每首古詩(shī)的url,接下來(lái)進(jìn)入到具體古詩(shī)網(wǎng)頁(yè)中獲取內(nèi)容盗棵。同樣需要自定義一個(gè)解析器(繼承HTMLParser)
-
2.加載每首古詩(shī)的url獲取內(nèi)容,進(jìn)行了換行處理
在主函數(shù)中調(diào)用如下,這個(gè)只加載了前10首古詩(shī)
-
3.下面是運(yùn)行的結(jié)果