之前一直就對(duì)網(wǎng)絡(luò)爬蟲(chóng)很感興趣鹦肿,剛好實(shí)驗(yàn)室學(xué)長(zhǎng)有個(gè)小任務(wù)讹挎,就攬下來(lái)嘗試著去做下如筛,花了一天的時(shí)間完成了牺丙!
Beautifulsoup是什么
Beautiful Soup 是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù).它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間.
大家可以從上面那個(gè)Beautifulsoup中文官方文檔中去學(xué)習(xí)下Beautifulsoup的一些基本的用法则涯,非常好用的一個(gè)從html文件中提取數(shù)據(jù)的python庫(kù)。
注意:Mac在安裝beautifulsoup的時(shí)候使用pip安裝時(shí)記得使用sudo獲取管理員權(quán)限冲簿,不然可能會(huì)失敗粟判,還有setuptools版本的問(wèn)題,大家可以自行百度峦剔。??
這次任務(wù)
從這個(gè)網(wǎng)址這樣類(lèi)似的表格上提取指定欄目的數(shù)據(jù)档礁。我們可以通過(guò)開(kāi)發(fā)者工具來(lái)看下,我們需要的內(nèi)容在哪個(gè)標(biāo)簽里羊异。
紅框內(nèi)的數(shù)據(jù)是我們要提取的事秀,而右邊是網(wǎng)頁(yè)的html層級(jí)∫安埃可以看出我們想要的數(shù)據(jù)在多層表格內(nèi)易迹,td,tr中間平道。
解決問(wèn)題
爬蟲(chóng)就是將整個(gè)網(wǎng)頁(yè)通過(guò)url將網(wǎng)頁(yè)爬取下來(lái)睹欲,然后根據(jù)語(yǔ)法規(guī)則去匹配html代碼中存在的數(shù)據(jù),通過(guò)python的beautifulsoup可以很快的將數(shù)據(jù)給‘爬’出來(lái)一屋。
html = requests.get(html_url).text
soup = BeautifulSoup(html,'html.parser') ```
通過(guò)這兩句我們就將要爬取的html頁(yè)面給保存下來(lái)了窘疮,并初始化了Beautifulsoup,方便之后的提取冀墨。
通過(guò)開(kāi)發(fā)者工具我們可以看出闸衫,整個(gè)表格都是由tr,td等標(biāo)簽組成诽嘉,我們要先獲取表格的表頭蔚出,然后再去獲得對(duì)應(yīng)表頭內(nèi)的數(shù)據(jù)。在使用beautiful的時(shí)候虫腋,我們首先要理解html文檔的dom樹(shù)的概念骄酗。這樣在使用parent的時(shí)候就會(huì)比較容易。我們主要使用了get_text()方法和獲得父親悦冀,兄弟的節(jié)點(diǎn)趋翻,然后在其中find_all(' ')找對(duì)應(yīng)的標(biāo)簽即可。
```python
for nobr in table_title:
if re_table_title.match(nobr.get_text()):
table_content = nobr.parent.next_sibling.next_sibling
KO_ID = table_content.find('a').get_text()
Anno = table_content.find_all('td')[1].get_text()
break ```
可以看出盒蟆,我們找到了表頭```table.title```,它返回的是一個(gè)list踏烙,便利其中的找到是我們需要的表頭,這里使用了正則表達(dá)式```match```也是我們非常常用的在爬蟲(chóng)使用中的一個(gè)技術(shù)历等。然后找到其兄弟節(jié)點(diǎn)也就是同級(jí)的對(duì)應(yīng)的表的內(nèi)容```table_content```其中的數(shù)據(jù)宙帝。最后把數(shù)據(jù)都寫(xiě)入文件中保存起來(lái),這樣就實(shí)現(xiàn)了網(wǎng)絡(luò)爬蟲(chóng)爬取我們想要的數(shù)據(jù)募闲。

>哈哈步脓,做完還是非常有成就感的啊浩螺!