xml
通過標籤表達資訊,成對出現,可擴充套件性好,但繁瑣。
json
有型別的鍵值對,可以巢狀使用 ,適合程式處理(js),較xml簡潔。
「key」:「value」
「key」:[「value1」, 「value2」]
「key」:
yaml
無型別鍵值對,也就是沒有引號,文字資訊比例最好,可讀性好。
name:
-北京理工大學
-天津大學
#表示注釋,-表示並列的值資訊,鍵值對之間可以巢狀。
資訊提取的一般方法
方法一:完整解析資訊的標記形式,再提取關鍵資訊。
優點:資訊解析準確。
缺點:提取過程繁瑣,速度慢。
方法二 :無視標記形式,直接搜尋關鍵資訊。
對資訊的文字查詢函式即可。
優點:提取過程簡潔,速度較快。
缺點:提取結果準確性與資訊內容相關。
方法三:融合方法
提取html中所有url鏈結
1搜尋到所有標籤
2解析標籤格式,提取href後的鏈結內容。
<>.find_all(name, attrs, recursive,string, **kwargs)
返回 乙個列表型別,儲存查詢的結果。
name:對標籤名稱的檢索字串。
attrs:對標籤屬性值的檢索字串 ,可標註屬性檢索。
recursive:是否對子孫全部檢索,預設true。
列印所有標籤
for tag in soup.find_all(true): print(tag.name)
找到所有的帶有b的標籤
for tag in soup.find_all(re.compile('b')): print(tag.name)
找帶鏈結的
print(soup.find_all(id=re.compile(『link』)))
找帶關鍵字的
print(soup.find_all(string="basic python"))
用正規表示式找到帶關鍵字的
print(soup.find_all(string=re.compile("python")))
(..)
等價於.find_all(..)
soup(..)
等價於soup.find_all(..)
擴充套件方法
<>.find():搜尋 且只返回乙個結果,字串型別,通.find_all()引數。
<>.find_parents():在先輩結點中搜尋,返回列表型別,同.find_all()引數。
<>.find_parent():在先輩結點中返回乙個結果,字串型別,同.find()引數。
<>.find_next_siblings():在後續平行節點中搜尋 ,返回列表型別 ,同.find_all()引數。
<>.find_next_sibling():在後續平行節點中搜尋,字串型別,同.find()引數。
<>.find_previous_siblings():在前序平行節點中搜尋,返回 列表型別,同.find_all()引數。
<>find_previous_sibling():在前序平行節點中返回乙個結果,字串型別,同.find()引數。
資訊提取的一般方法
<>.find_all(name, attrs, recursive, string, **kwargs)
(..)
等價於.find_all(..)
soup(..)
等價於soup.find_all(..)
程式的結構設計
步驟一:從網路上獲取大學排名網頁內容
gethtmltext()
步驟 二:提取網頁內容中資訊到 合適的資料結構
fillunivlist()
步驟三:利用資料結構展示並輸出結果
printunivlist()
爬取中國排名前20的**
import requests
import bs4
from bs4 import beautifulsoup
def gethtmltext(url):
try:
#獲得網頁
r = requests.get(url, timeout
= 30)
#看異常資訊
r.raise_for_status(
)#修改編碼
return r.text
except:
#有異常就返回空字串
return
""def fillunivlist(ulist, html):
#煮一鍋湯
soup = beautifulsoup(html, "html.parser"
)#遍歷tbody的孩子
fortr
in soup.find(
'tbody'
).children:
#如果這個tag存在
if isinstance(tr, bs4.element.tag):
#獲得td標籤列表
tds = tr(
'td'
)#把想要的屬性存到ulist中
[tds[0].string, tds[1].string, tds[2].string]
)def printunivlist(ulist, num):
#輸出print(
"\t\t".format(
"排名", "學校名稱", "總分"
))#迴圈
for i in range(num):
u = ulist[i]
print(
"\t\t".format(u[0], u[1], u[2]
)) print(
"suc" + str(num))
def main(
): #陣列,用來存結果
uinfo =
url =
''html = gethtmltext(url)
fillunivlist(uinfo, html)
printunivlist(uinfo, 20)
main(
)
Python筆記 爬蟲
用到的庫 urllib。在python3.x中 urlretrieve函式也在urllib.request下,因此只需要匯入request即可。from urllib import request基本的思路是 用request.urlopen 開啟網頁 url.read decode 得到網頁原始碼...
Python爬蟲筆記
import requests 匯入requests模組 1.傳送請求 import requests r requests.get 2.定製headers 這種情況適用於爬取返回的結果出現 抱歉 無法訪問 等字眼時,這時需要模擬乙個介面伺服器自行爬取的狀態 import requests r re...
Python 爬蟲筆記
requests scrapy 兩個解析 html 文件的有力工具 lxml beautifulsoup4,一切暴露在網際網路中的資料,都不是絕對安全的,但絕對是需要費腦筋才需要得到的,爬蟲很簡單學,真正難的是反爬。requests 模組常用方法 單次請求 每傳送一次請求,就需要呼叫一次 多次請求 ...