python爬蟲筆記(7)

2021-10-08 10:25:53 字數 3362 閱讀 7005

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 模組常用方法 單次請求 每傳送一次請求,就需要呼叫一次 多次請求 ...