Python3爬蟲(3)單網頁簡單爬取文字信息

在前兩篇小短文中,利用urllib.request和正則表達式實現了爬取圖片。

現在來爬取文字信息。

單網頁爬取文字 難度 1.0 星

在單個網頁中,利用BeautifulSoup4庫將文字快速抽取相對簡單,所以只有1.0難度。

希望你能在五個地鐵站的時間裡快速看完此短文。為降低難度,本文不用自定義函數。

這次不幸被選中的是58同城二手車頁面:

【成都二手車市場|成都二手車交易市場】 -成都58同城cd.58.com圖標

前提:python3、BeautifulSoup4庫、pandas庫、Notepad++軟體

--這裡pandas庫用來處理數據,也許不是必須的,只是為了方便快捷, Notepad++是為了更高效的查看網頁代碼,也不是必須的。--

一:導入需要的庫

import urllib.requestnfrom bs4 import BeautifulSoupnimport pandas as pdn

BeautifulSoup4是python3中用於解析網頁的庫,pandas庫是用來整合、清洗、統計數據的。對pandas不熟悉的,可以逛逛我的另外一個專欄:

python3 pandas庫zhuanlan.zhihu.com圖標

二、讀取、解碼網頁

url=http://cd.58.com/ershouche/nhtml=urllib.request.urlopen(url)nhtmltext=html.read().decode(utf-8)n

使用urlopen生成類文件類型,使用read()讀取其內容,再使用decode解碼成文本。

看到這一大片亂七八糟的代碼,頭都大了。我們需要將它格式化。

三、將網頁代碼格式化輸出

soup=BeautifulSoup(htmltext)nbeautitext=soup.prettify()nhandle=open(rE:testershouche.txt, w, encoding=utf-8)nhandle.write(beautitext)n

BeautifulSoup將網頁的文本內容解析成特殊的BeautifulSoup對象:

prettfy()就是將這種對象格式化,並轉換為string:

open函數在這裡是新建一個ershouche.txt的文件,並允許寫入,而且這個文件是utf-8的,與我們解析的網頁一致。

write就是將內容寫入文件。

如果使用notepad++軟體打開的話,這些網頁代碼就更加清晰明了。

四、解析html找到需要的內容

在經過n分鐘到n小時不等的人工解析後,我們發現:

原網頁的標題欄位於

標籤<h1 class="info_tit">下面。

信息欄位於標籤<div class="info_param">下面。

而價格欄位於標籤<div class="col col3">下面。

五、提取信息

在上一步的解析之後,就能利用find_all很快將信息提取出來。

title=[x.text.strip() for x in soup.find_all(h1,info_tit)]ninfo=[x.text.strip() for x in soup.find_all(div,info_param)]nprice=[x.text.strip() for x in soup.find_all(div,col col3)]n

這裡是三個一樣的語法結構,稍稍了解一下:

所以,最後title, info, price是三個分別包含了每輛車三部分信息的list。

我們要確保這三個list要一樣長,否則,信息就差遠了。

六、將信息組合:

將這三個list組合在一個有多種方法,個人比較喜歡用pandas。

df=pd.DataFrame()ndf[title]=titlendf[info]=infondf[price]=pricen

聰明的你也許發現有這兩步有多個重複的地方,可以用函數。不過本文為了降低難度還是不用的好。

DataFrame()在這裡建立了一個空的數據框。

然後使用直接賦值的方法將三個list變成了數據框的三列。

後續就是使用pandas對這些數據進行清洗,分列,匯總了。那些就是pandas的活了,這裡就略去了。

最後稍稍瞟一眼爬出來的數據:

下一篇文章,我們來把它這些二手車頁面全部爬一爬,看看有多少條信息,共有70個頁面啊。。。。。

#步驟一nimport urllib.requestnfrom bs4 import BeautifulSoupnimport pandas as pdn#步驟二nurl=http://cd.58.com/ershouche/nhtml=urllib.request.urlopen(url)nhtmltext=html.read().decode(utf-8)n#步驟三nsoup=BeautifulSoup(htmltext)nbeautitext=soup.prettify()nhandle=open(rE:testershouche.txt, w, encoding=utf-8)nhandle.write(beautitext)n#步驟五ntitle=[x.text.strip() for x in soup.find_all(h1,info_tit)]ninfo=[x.text.strip() for x in soup.find_all(div,info_param)]nprice=[x.text.strip() for x in soup.find_all(div,col col3)]n#步驟六ndf=pd.DataFrame()ndf[title]=titlendf[info]=infondf[price]=pricendf.to_excel(rE:testrawmaterial.xls)n

推薦閱讀:

福布斯系列之數據採集 | Python數據分析項目實戰
你猜簡書有多少名簽約作者?
Python筆記 · 基於72萬知乎用戶信息的數據可視化

TAG:python爬虫 | 网页爬虫 |