日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3 beautifulsoup 表格_[Python3爬虫]Beautiful Soup解析库

發布時間:2025/3/13 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 beautifulsoup 表格_[Python3爬虫]Beautiful Soup解析库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解析庫與Beautiful Soup

通過request庫,我們已經能夠抓取網頁信息了,但要怎么提取包含在Html代碼里面的有效信息呢?談到匹配有效信息你肯定會想到正則表達式,這里就不討論了,實際上關于正則表達式已經可以寫一本書了,并且由于網頁特殊的層級結構,也沒必要使用正則表達式。python提供了更好的html和xml的解析庫Beautiful Soup 和XPath等。

什么是Beautiful Soup

Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間

———Beautiful Soup中文文檔

安裝

pip3 install beautifulsoup4

學習準備

為了學習和測試Beautiful Soup,我寫了一個簡單的程序框架,包含3個函數獲取頁面,解析頁面,和主函數,測試的時候只要修改解析函數的部分代碼就可以了

import requests

from bs4 import BeautifulSoup

def getHtml(url): #獲取網頁內容

try:

r = requests.get(url,timeout = 30)

r.encoding = r.apparent_encoding; #設置編碼格式為原網頁的編碼格式,避免亂碼

return r.text

except:

return ""

def soupHtml(html): #解析網頁內容

print(html)

soup = BeautifulSoup(html,'lxml')

# 解析代碼

if __name__ == '__main__':

url = "http://www.baidu.com"

html = getHtml(url)

soupHtml(html)

可以看到爬取的是百度的首頁,之后的代碼,添加進去就能運行了

基本用法

BeautifulSoup(content,"html.parser"/"lxml")

兩個參數cnetent表示待解析的網頁內容,后面的參數可以理解為待解析的格式。lxml解析器有解析HTML和XML的功能,而且速度快,容錯能力強,所以推薦使用它。

選擇元素

根據標簽名來選擇元素

soup = BeautifulSoup(html,'lxml')

print(soup.title)

print(soup.head)

print(soup.div)

>>>

百度一下,你就知道

連帶標簽一起輸出,當有多個標簽匹配時,只返回第一個

獲取內容

標簽的string方法

soup = BeautifulSoup(html,'lxml')

print(soup.title.string)

print(soup.head.string)

print(soup.div.string)

>>> 百度一下,你就知道

獲取標簽的屬性

html中的標簽有很多屬性,例如,id,name,class,href等等,可以通過attrs獲取標簽的屬性

soup = BeautifulSoup(html,'lxml')

print(soup.link.attrs)

>>> {'rel': ['stylesheet'], 'type': 'text/css', 'href': 'http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css'}

獲取屬性的值

通過返回的值,可以知道它是字典類型的結構,這樣就可以通過鍵獲取他的值

soup = BeautifulSoup(html,'lxml')

print(soup.p)

>>>

把百度設為主頁關于百度About Baidu

print(soup.p.attrs)

>>> {'id': 'lh'}

print(soup.p.attrs['id'])

>>>lh

關聯選擇

在做選擇的時候,有時候不能做到一步就選到想要的節點元素,需要先選中某一個節點元素,然后以它為基準再選擇它的子節點、父節點、兄弟節點等

1.子節點和子孫節點

獲取子節點 contents,children

for i,content in enumerate(soup.head.contents):

print(i,content)

for i,child in enumerate(soup.head.children):

print(i,child)

>>>0

1

2

3

百度一下,你就知道

4

輸出head標簽的子節點,contents和children是等效的

子孫節點

如果要得到所有的子孫節點的話,可以調用descendants屬性

for i,child in enumerate(soup.body.descendants):

print(i,child)

2.父節點和祖先節點

如果要獲取某個節點元素的父節點,可以調用parent屬性,獲取其祖先節點調用其parents屬性。

3.兄弟節點

next_sibling和previous_sibling分別獲取節點的下一個和上一個兄弟元素,next_siblings和previous_siblings則分別返回所有前面和后面的兄弟節點的生成器。

查詢方法

1.find_all()

find_all查詢所有符合條件的元素。給它傳入一些屬性或文本,就可以得到符合條件的元素了。

API接口如下:

find_all(name , attrs , recursive , text , **kwargs)

跟據名稱查找

for i,input in enumerate(soup.fiind_all(name='input')):

print(i,input)

>>> 0

1

2

3

4

5

6

7

找出所有的input標簽

根據屬性查找

for i,tag in enumerate(soup.find_all(attrs={'class':'mnav'})):

print(i,tag)

>>> 0 糯米

1 新聞

2 hao123

3 地圖

4 視頻

5 貼吧

6 登錄

7 設置

找出所有class屬性為"mnav"的標簽

根據文本查找

import re

# 導入正則匹配庫

print(soup.find_all(text=re.compile('百')))

['百度一下,你就知道', '把百度設為主頁', '關于百度', '使用百度前必讀']

2.find()

find()方法與find_all(),方法一致,只是find()返回的是單個元素,也就是第一個匹配的元素,而前者返回的是所有匹配的元素組成的列表。這里就不討論了

CSS選擇器

就是專門用于篩選指定樣式的標簽,通過select方法

print(soup.select('.mnav'))

for i,tag in enumrate(soup.select('.mnav')):

print(i,tag)

>>>0 新聞

1 hao123

2 地圖

3 視頻

4 貼吧

通過結果我們發現其實完全可以通過class屬性來查找,應為通過CSS來查找本質就是通過class屬性來查找

程序實現

爬取最好大學網2018年排名信息,并格式化輸出

html代碼分析

1

清華大學

北京

95.3

100.0

97.50%

1182145

44730

1.447

1556

121

1586283

500525

1.所有大學信息包含在tbody的子標簽中,即整個表格

2.每一所大學在一個tr標簽中,即表格中的一行

3.各大學的排名,名稱,綜合評分,在td標簽中,即表格的一列

request + BeautifkuSoup實現

import requests

from bs4 import BeautifulSoup

import bs4

def getUnivtext(url):

try:

r=requests.get(url,timeout=30);

r.raise_for_status()

r.encoding=r.apparent_encoding;

return r.text

except:

return ""

def fillUnivList(ulist,html):

soup=BeautifulSoup(html,"html.parser")

for tr in soup.find('tbody').children:

if isinstance(tr,bs4.element.Tag):#bs4庫里的標簽類型

tds=tr('td')

ulist.append([tds[0].string,tds[1].string,tds[3].string])

def printUnivList(ulist,num):

print("{:^10}\t{:<10}\t{:<10}\t".format("排名","大學名稱","評分"))

for i in range(num):

u=ulist[i]

print("{:^10}\t{:^6}\t{:^10}\t".format(u[0],u[1],u[2]))

if __name__ == '__main__':

Uinfo=[]

url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html"

html=getUnivtext(url)

fillUnivList(Uinfo,html)

printUnivList(Uinfo,310)

運行效果

pic1.png

投喂我

寫文不易,如果本文對你有幫助,別忘了投喂我哦

關于作者

總結

以上是生活随笔為你收集整理的python3 beautifulsoup 表格_[Python3爬虫]Beautiful Soup解析库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。