以前都聽(tīng)別人說(shuō)爬蟲(chóng)功能希柿,我也沒(méi)有什么強(qiáng)烈的需求爬取什么數(shù)據(jù)浮创,曾經(jīng)有想過(guò)一些省市縣的分布應(yīng)該是有一個(gè)長(zhǎng)期的維持忧吟,那么這些數(shù)據(jù)來(lái)自于哪里呢,是可以通過(guò)民政部官網(wǎng)獲取斩披,那么獲取了溜族,是否能夠進(jìn)行解析找到對(duì)應(yīng)的數(shù)據(jù)呢,經(jīng)過(guò)試驗(yàn)垦沉,真正抓取到了數(shù)據(jù)并且把數(shù)據(jù)分解出來(lái)了煌抒,可以留備后用。
from urllib.request import urlopen #查找 Python 的 request 模塊(在 urllib 庫(kù)里面)厕倍,只導(dǎo)入一個(gè) urlopen 函數(shù)寡壮,urllib 是 Python 的標(biāo)準(zhǔn)庫(kù),就是說(shuō)不用額外安裝就可以運(yùn)行
from bs4 import BeautifulSoup
import re # 進(jìn)行正則表達(dá)式驗(yàn)證
html = urlopen("http://www.mca.gov.cn/article/sj/xzqh/2020/2020/202003061536.html")
bsObj = BeautifulSoup(html.read(),"html.parser")
nameList = bsObj.findAll("tr",{"height":"19"})
for i,name in enumerate(nameList):
if re.match(r'\n\n.*?\n\xa0\xa0 .*?\n\n\n\n\n\n\n',name.text):
e = name.text.replace('\n', '')
key = e.split('\xa0\xa0 ',1)[0]
value = e.split('\xa0\xa0 ',1)[1]
print("111 key = "+key+" value = "+value)
elif re.match(r'\n\n.*?\n\xa0.*?\n\n\n\n\n\n\n',name.text):
e = name.text.replace('\n', '')
key = e.split('\xa0',1)[0]
value = e.split('\xa0',1)[1]
print("222 key = "+key+" value = "+value)
elif re.match(r'\n\n.*?\n.*?\n\n\n\n\n\n\n',name.text):
e = name.text.replace('\n\n', '')
key = name.text.split('\n',4)[2]
value = name.text.split('\n',4)[3]
print("333 key = "+key+" value = "+value)
通過(guò)以上內(nèi)容讹弯,了解了一些知識(shí)况既,比如通過(guò)urlopen進(jìn)行聯(lián)網(wǎng)獲取,通過(guò)BeautifulSoup進(jìn)行html解析獲取所需要的內(nèi)容闸婴,通過(guò)re進(jìn)行正則表達(dá)式的驗(yàn)證區(qū)分相關(guān)的字段內(nèi)容坏挠,后邊對(duì)一些內(nèi)容進(jìn)行詳細(xì)的描述。