腳本之家 你與百萬開發(fā)者在一起 作者:江一 出品 | 腳本之家(ID:jb51net) 網(wǎng)絡(luò)爬蟲是幫助我們抓取互聯(lián)網(wǎng)上有用信息的利器。如果你有一點(diǎn)python基礎(chǔ),實(shí)現(xiàn)一個(gè)簡(jiǎn)單的爬蟲程序并不難。今天,我們以一個(gè)實(shí)際的例子——爬取網(wǎng)易新聞,重點(diǎn)介紹使用 BeautifulSoup 對(duì)HTML進(jìn)行解析處理。 1.尋找數(shù)據(jù)特征網(wǎng)易新聞的網(wǎng)址 URL 為:https://www.163.com/ 我們打開網(wǎng)頁看看: 我們需要爬取這個(gè)頁面每一條新聞的標(biāo)題,鼠標(biāo)右擊一條新聞的標(biāo)題,選擇“檢查元素”, 出現(xiàn)下圖的窗口: 圖片中藍(lán)框的位置就是那一條新聞標(biāo)題在 HTML 中的結(jié)構(gòu)、位置和表現(xiàn)形式:<a > ,它上一級(jí)元素為:<li>,再上一級(jí)元素為:<ul >再上一級(jí)元素為:<div> 我們?cè)倏戳硪粭l新聞的標(biāo)題,發(fā)現(xiàn)它的結(jié)構(gòu)和之前我們分析的新聞標(biāo)題的結(jié)構(gòu)是一樣的。通過這些信息,我們就可以確定新聞標(biāo)題在 HTML 文檔中的位置。接下來,我們開始使用 Python 對(duì)網(wǎng)易新聞標(biāo)題進(jìn)行爬取。 2.編寫爬取代碼首先呈上完整的代碼: 運(yùn)行程序,獲取到的部分結(jié)果為如下所示: 這正是我們所需要的。雖然代碼很簡(jiǎn)單,但還是做一點(diǎn)點(diǎn)講解,方便剛接觸的同學(xué)理解。 3.逐行解析代碼
首先,我們定義了文件的編碼形式為 UTF-8,以避免一些編碼錯(cuò)誤導(dǎo)致中文亂碼。
然后,我們引入了相關(guān)的模塊,requests 用于 HTTP 請(qǐng)求,BeautifulSoup 用于解析 HTML 響應(yīng)。
設(shè)置一個(gè)變量 url,值為網(wǎng)易新聞的 URL 。
使用 requests.get()對(duì) URL 發(fā)起 GET 方式的 HTTP 請(qǐng)求,并使用 text()方法獲取響應(yīng)的文本 內(nèi)容,最后將其賦值給變量 wbdata。
使用 BeautifulSoup 對(duì)響應(yīng)文本 wbdata 進(jìn)行解析處理,這里使用的是 lxml 庫,如何沒有安 裝,可以使用 Python 自帶的 html.parser,效果也是一樣的。
在解析后的文本中,使用select選擇器,在文本中選擇指定的元素,通常我們還會(huì)使用find() 和 findall()方法來進(jìn)行元素選擇。這一步返回的為一個(gè)列表,列表內(nèi)的元素為匹配的元素 的 HTML 源碼。
對(duì)結(jié)果列表進(jìn)行遍歷,再從遍歷的元素中提取出數(shù)據(jù),get('href')表示獲取屬性名為“hre的屬性值,get_text()表示獲取標(biāo)簽的文本信息。這樣,一個(gè)簡(jiǎn)單的網(wǎng)易新聞爬蟲就完成了。 如果想學(xué)習(xí)更多 requests 模塊和 BeautifulSoup 模塊的內(nèi)容,它們的官方文檔將是最好的指南。 參考文檔:
作者:江一 |
|