Python網絡數據採集--第二章

from urllib.request import urlopen
from bs4 import BeautifulSoup
##2.1
#我們可以抓出整個頁面,然後創建一個BeautifulSoup 對象
html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bsopj = BeautifulSoup(html)

#2.2.1
## 查找
nameList = bsopj.find_all("span", {"class":"green"})
nameList1 = bsopj.find_all(text="the prince")
# for name in nameList:
#     print(name.get_text())
#print(len(nameList1))
#.get_text() 會把你正在處理的 HTML 文檔中所有的標籤都清除,然後返回一個只包含文字的字符串。 假如你正在處理一個包含許多超鏈接、段落和標籤的大段源代碼, 那麼 .get_text() 會把這些超鏈接、段落和標籤都清除掉,只剩下一串不帶標籤的文字。
#用 BeautifulSoup 對象查找你想要的信息,比直接在 HTML 文本里查找信息要簡單得多。 通常在你準備打印、存儲和操作數據時,應該最後才使用 .get_text()。一般情況下,你應該儘可能地保留 HTML 文檔的標籤結構。

#關鍵詞參數keyword:可以讓你選擇那些具有指定屬性的標籤。
#allTxt = bsopj.find_all(id = "text")
#allTxt = bsopj.find_all("",{"id":"text"})#這倆其實一樣的
#print(allTxt)

#2.2.2其他beautifulSoup對象
#•BeautifulSoup 對象
#前面代碼示例中的 bsObj
#• 標籤 Tag 對象
# BeautifulSoup 對象通過 find 和 findAll,或者直接調用子標籤獲取的一列對象或單個
# 對象,就像:bsObj.div.h1
#•其他不常用

#2.2.3導航樹
#1.處理子標籤和其他後代標籤??????????其實不太懂
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html)
# for child in bsObj.find("table",{"id":"giftList"}).children:
#     print(child)
#2.處理兄弟標籤
#next_siblings() 函數可以讓收集表格數據成爲簡單的事情,尤其是處理帶標題行的表格
# for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings:
#     print(sibling)
#兄弟節點可以理解爲和本節點處在統一級的節點,.next_sibling 屬性獲取了該節點的下一個兄弟節點,.previous_sibling 則與之相反,如果節點不存在,則返回 None
#3.父標籤處理
#較爲少用
#print(bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())

#2.3正則表達式
#2.4正則表達式和beautifulsoup
import re
images = bsObj.find("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
# for image in images:
#     print(image["src"])
#2.5獲取屬性
#print(images.attrs["src"])

#2.6Lambda表達式
# BeautifulSoup 用這個函數來評估它遇到的每個標籤對象,最後把評估結果爲“真”的標籤保留,把其他標籤剔除。
#下面的代碼就是獲取有兩個屬性的標籤:
print(bsObj.findAll(lambda tag: len(tag.attrs) == 2))

#2.7超越BeautifulSoup
# BeautifulSoup是 Python 裏最受歡迎的 HTML 解析庫之一,但是除了lxml、HTML parser也可以

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章