記下兩個與本文內容不太相關的知識點。
import re 對正則表達式支持的包。
str(soup.p).decode('utf-8') 對標簽內容轉碼。
Beautiful Soup 是用Python寫的一個HTML/XML的解析器,它可以很好的處理不規范標記並生成剖析樹。 它提供簡單又常用的導航,搜索以及修改剖析樹的操作。它可以大大節省你的編程時間。
通俗的來說,就是在
req = urllib2.Request(url, headers=headers)
page = urllib2.urlopen(req, timeout=60)
contents = page.read()
之后,對contents進行解析 soup = BeautifulSoup(contents, 'html.parser'),這樣構建的是Python標准庫,然后我們便可以對這個soup對象進行一系列的操作,提取我們所需要的元素。
我們對用法進行一下解釋:
soup.title 得到的是<title>標簽,以及標簽里的內容。但是得到的是所有<title>標簽中的第一個。<title>這里是內容</title>,紅字部分。
soup.title.name 得到的是<title>標簽的name屬性的值。得到的是所有<title>標簽中的第一個。
soup.title.string 得到的是<title>開始和結束標簽之間的值。<title>這里是內容</title>,即紅字部分。得到的是所有<title>標簽中的第一個。
soup.find_all('title') 得到所有標簽為<title>的的標簽,以及標簽里的內容。返回的是一個序列,可以對它循環,得到自己想要的東西。
soup.find(id='3') 得到id為3的標簽。
soup.p.get_text() 返回的是<p>標簽的文本。
soup.a['href'] 返回<a>標簽的 herf 值 。
soup.head.contents 獲得head下的所有子孩子。以列表的形式返回結果,可以使用 [num] 的形式獲得 。獲得標簽,使用.name 就可以。
print soup.find_all(text="Elsie") 獲得文本為Elsie的標簽。
print soup.find_all("a", limit=2) 返回兩個<a>標簽。
string屬性,如果超過一個標簽的話,那么就會返回None,否則就返回第一個標簽的string。超過一個標簽的話,可以試用strings。
獲取標簽的孩子,可以使用children,但是不能print soup.head.children,沒有返回列表,返回的是 <listiterator object at 0x108e6d150>,不過使用list可以將其轉化為列表。可以使用for 語句遍歷里面的孩子。
向上查找可以用parent函數,如果查找所有的,那么可以使用parents函數。
查找下一個兄弟使用next_sibling,查找上一個兄弟節點使用previous_sibling,如果是查找所有的,那么在對應的函數后面加s就可以。
soup.select()找到的數據,返回為list類型,即,尋找到的是所有符合要求的數據。
soup.select('div') 直接返回所有div標簽的所有內容
soup.select('.ebox') . 這個點表示查詢class="ebox"的,所有標簽內容。
len(soup.select('.ebox')) 可以查詢出20條數據。
soup.select('#index_nav') 查找所有id為 index_nav 的標簽。
soup.select('div #index_nav') 表示尋找div標簽中id為index_nav的標簽內容。
soup.select('p[class="etitle"]') 查找所有class為etitle的<p>標簽。
http://cuiqingcai.com/1319.html , http://blog.csdn.net/akak714/article/details/50130743 這兩個網址可以學習一下。
