基本庫(kù)介紹
requests
安裝
pip install requests
基本用法
response = reqeusts.get(url)
這里個(gè)get方法代表獲取內(nèi)容的方式是GET方法粘招。
獲取返回頭信息
headers = response.headers
headers是一個(gè)dict
獲取狀態(tài)碼
response.status_code
字符集
當(dāng)前內(nèi)容字符集response.encoding
丈甸,這個(gè)字符集代表requests使用哪種字符集來(lái)解碼網(wǎng)絡(luò)內(nèi)容,而且這個(gè)很有可能出錯(cuò)跟磨。這個(gè)字符集是從headers中獲取的咒彤,如果headers中沒(méi)有編碼信息,那么很有可能出錯(cuò)(www.baidu.com
這個(gè)頁(yè)面就會(huì)出現(xiàn)這個(gè)問(wèn)題)。因?yàn)樵谶@種情況下劲藐,requests直接就返回ISO-8859-1
。正確的做法是從html頁(yè)面中進(jìn)一步提取正確的字符信息樟凄。一個(gè)有意思的事情是聘芜,response.apparent_encoding
能正確獲取百度首頁(yè)中正確的字符集信息,但是requests卻不使用它來(lái)解決容錯(cuò)問(wèn)題缝龄。
獲取文本內(nèi)容
response.text
代表根據(jù)response.encoding
解碼之后的文本汰现,而response.content
則代表字節(jié)內(nèi)容。通過(guò)設(shè)置encoding
可以修改解碼方式二拐。
更多requests教程參考這個(gè)鏈接requests中文教程
BeautifuSoup
安裝
pip install beautifulsoup4
使用方法
from bs4 import BeatutifulSoup soup = BeautifulSoup(html,'html5lib')
先要初始化一個(gè)soup對(duì)象服鹅,這html5lib就是使用的解析庫(kù)凳兵。
例子:
<html> <title>東哥</title> <body> <h1>hello</h1> <h2>Tag H2</h2> <h2 class = 'name'>Tag H2 name</h2> </body> </html>
輸出例子中的標(biāo)題:soup.title
查找h1標(biāo)簽:h1 = soup.find('h1')
輸出h1中的內(nèi)容 h1.text
find只能找第一個(gè)碰到的h1標(biāo)簽百新。
找出所有的h2標(biāo)簽,h2list = soup.find_all(h2)
庐扫,這里返回的是一個(gè)列表饭望。當(dāng)然我們還可以控制查找范圍,如只查找class='name'
的h2形庭,h2list = soup.find_all(h2铅辞,attrs={'class':'name'})
。
在實(shí)際的使用中一定要靈活運(yùn)用各種條件盡量做到精確查找萨醒。比如在一個(gè)例子中斟珊,如果一個(gè)頁(yè)面是一個(gè)文章列表,每個(gè)列表項(xiàng)目是一個(gè)div開(kāi)頭富纸。如果直接查找div可能會(huì)找到大量不相干的信息囤踩,如果每個(gè)文章項(xiàng)目的div中都有個(gè)標(biāo)題標(biāo)簽h2,那么就可以先通過(guò)查找h2然后向上查找div中的其它內(nèi)容晓褪。
h2list = soup.find_all('h2',attrs={'class':'title'}) for h2 in h2list: div = h2.parent span = div.find('span')#查找其它信息 ....#如日期 作者 評(píng)論數(shù) 閱讀數(shù)
獲取屬性以及文本
<a href='www.xxx.com'>點(diǎn)擊</a>
如果此時(shí)tag代表上面的超鏈接節(jié)點(diǎn)堵漱,使用tag['href']就可以獲取鏈接地址,使用tag.text可以獲取其中文本涣仿。如果標(biāo)簽中還有其它html標(biāo)簽勤庐,這些標(biāo)簽會(huì)清除掉。使用tag.contents則可以獲取標(biāo)簽中所有信息包括文本和其它標(biāo)簽好港,返回的是個(gè)列表愉镰。
更多beautifulsoup教程參考這個(gè)鏈接BeautifulSoup 4.2.0中文文檔