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

歡迎訪問 生活随笔!

生活随笔

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

python

Python学习 Day43 数据解析-BeautifulSoup 07

發布時間:2023/12/14 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习 Day43 数据解析-BeautifulSoup 07 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

BeautifulSoup 解析數據

一、BeautifulSoup概述

1.BeautifulSoup

  • 是一個可以從HTML或XML文檔中提取數據的Python庫
  • 功能簡單強大、容錯能力高、文檔相對完善,清晰易懂
  • 非Python標準模塊,需要安裝才能使用

2.安裝方式

  • pip install bs4 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

3.測試方式

  • import bs4

4.解析器

BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,如果不安裝第三方解析器,則Python會使用默認解析器

(1)標準庫

  • 使用方法:BeautifulSoup(html,‘html.parser’)
  • 優點:內置標準庫,速度適中,文檔容錯能力強
  • 缺點:Python3.2版本前的文檔容錯能力差

(2)lxml HTML

  • 使用方法:BeautifulSoup(html,‘lxml’)
  • 優點:速度快,文檔容錯能力強
  • 缺點:安裝C語言庫

(3)lxml XML

  • 使用方法:BeautifulSoup(html,‘xml’)
  • 優點:速度快,唯一支持XML
  • 缺點:安裝C語言庫

(4)html5lib

  • 使用方法:BeautifulSoup(html,‘html5lib’)
  • 優點:容錯能力最強,可生成HTML5
  • 缺點:運行慢,擴展差

二、代碼創建bs4對象

from bs4 import BeautifulSoup#待解析的文檔 html = '''<html><head><title>水面清圓</title></head><body><h1 class = 'cur book' float = 'left'>一一風荷舉</h1><a href = 'http://www.baidu.com'></a><h2><!--這里是注釋--></h2></body></html> '''#選擇一個解析器,創建bs對象 bs = BeautifulSoup(html,'lxml') #獲取標簽 print(bs.title) #獲取h1標簽的所有屬性 列表形式存放多個屬性值 print(bs.h1.attrs) #獲取單個屬性 print(bs.h1.get('class')) #寫法1 print(bs.h1['class']) #寫法2 #獲取屬性值 print(bs.a['href']) #獲取文本 print(bs.title.text) print(bs.title.string)#獲取內容 print('text:',bs.h2.text) #僅獲取文本內容 print('string:',bs.h2.string) #獲取到h2標簽中的所有內容 <title>水面清圓</title> {'class': ['cur', 'book'], 'float': 'left'} ['cur', 'book'] ['cur', 'book'] http://www.baidu.com 水面清圓 水面清圓 text: string: 這里是注釋Process finished with exit code 0

三、BS提取數據常用方法

(一)find()方法

  • 1.返回值類型:Tag
  • 2.功能:提取滿足要求的首個數據
  • 3.語法:bs.find(標簽,屬性)
  • 4.舉例:bs.find(‘div’,class_=‘books’)

(二)find_all()方法

  • 1.返回值類型:Tag
  • 2.功能:提取滿足要求的所有數據
  • 3.語法:bs.find_all(標簽,屬性)
  • 4.舉例:bs.find_all(‘div’,class_=‘books’)

(三)CSS選擇器

  • 1.通過ID查找:bs.select(’#abc’)
  • 2.通過classa查找:bs.select(’.abc’)
  • 3.通過屬性查找:bs.select(a[‘class=“abc”’])

(四)Tag對象

  • 1.獲取標簽:bs.title
  • 2.獲取所有屬性:bs.title.attrs
  • 3.獲取單個屬性的值:
    寫法1: bs.div.get(‘class’)
    寫法2: bs.div.[‘class’]
    寫法3: bs.a(‘href’)

代碼實現

from bs4 import BeautifulSoup #待解析的文檔 html = '''<title>晴空一鶴排云上</title><div class = 'info' float = 'left'>便引詩情到碧霄</div><div class = 'info' float = 'right' id = 'gb'><span>好好學習,天天向上</span><a href = 'http://www.baidu.com'></a></div><span>我是第二個span</span>''' #解析數據 bs = BeautifulSoup(html,'lxml') #獲得Tag對象 print(bs.title,type(bs.title))print('\n--------------bs.find()方法------------------------') #bs.find()方法:獲取滿足條件的第一個標簽,其類型也為Tag print(bs.find('div',class_='info'),type(bs.find('div',class_='info')))print('\n--------------bs.find_all()方法------------------------') #bs.find_all()方法:獲取滿足條件的所有標簽,返回的是一個標簽列表 print(bs.find_all('div',class_='info'),type(bs.find_all('div',class_='info')))print('\n-----------------------遍歷每一個標簽---------------------') for item in bs.find_all('div',class_ = 'info'):print(item,type(item))print('\n--------------獲取屬性--------------------') print(bs.find_all('div',attrs={'float':'right'}))print('\n---------------CSS選擇器---------------------') print(bs.select('#gb')) print('\n------------------------------------------------') print(bs.select('.info'))print('\n--------------獲取div標簽下的span標簽--------------------------') print(bs.select('div>span'))print('\n------------------------------------------------') print(bs.select('div.info>span'))print('\n------------------獲取標簽中的文本內容------------') for item in bs.select('div.info>span'):print(item.text) <title>晴空一鶴排云上</title> <class 'bs4.element.Tag'>--------------bs.find()方法------------------------ <div class="info" float="left">便引詩情到碧霄</div> <class 'bs4.element.Tag'>--------------bs.find_all()方法------------------------ [<div class="info" float="left">便引詩情到碧霄</div>, <div class="info" float="right" id="gb"> <span>好好學習,天天向上</span> <a href="http://www.baidu.com"></a> </div>] <class 'bs4.element.ResultSet'>-----------------------遍歷每一個標簽--------------------- <div class="info" float="left">便引詩情到碧霄</div> <class 'bs4.element.Tag'> <div class="info" float="right" id="gb"> <span>好好學習,天天向上</span> <a href="http://www.baidu.com"></a> </div> <class 'bs4.element.Tag'>--------------獲取屬性-------------------- [<div class="info" float="right" id="gb"> <span>好好學習,天天向上</span> <a href="http://www.baidu.com"></a> </div>]---------------CSS選擇器--------------------- [<div class="info" float="right" id="gb"> <span>好好學習,天天向上</span> <a href="http://www.baidu.com"></a> </div>]------------------------------------------------ [<div class="info" float="left">便引詩情到碧霄</div>, <div class="info" float="right" id="gb"> <span>好好學習,天天向上</span> <a href="http://www.baidu.com"></a> </div>]--------------獲取div標簽下的span標簽-------------------------- [<span>好好學習,天天向上</span>]------------------------------------------------ [<span>好好學習,天天向上</span>]------------------獲取標簽中的文本內容------------ 好好學習,天天向上Process finished with exit code 0

四、案例

爬取淘寶網首頁

import requests from bs4 import BeautifulSoup#請求的URL:淘寶網首頁 url = 'https://uland.taobao.com/' #加入請求頭 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'} #發送請求 resp = requests.get(url,headers) #返回一個HTML文檔#創建一個bs對象,解析返回的HTML文檔 bs = BeautifulSoup(resp.text,'lxml') #查詢所有的a標簽 a_list = bs.find_all('a') #遍歷每個a標簽,以獲取其href的屬性值 for a in a_list:url = a.get('href')#print(url)if url == None: #去掉href為空值的標簽屬性continueif url.startswith('http') or url.startswith('https'): #獲取以HTTP或HTTPS開頭的完整網址print(url)

輸出結果為可以跳轉的鏈接

https://s.click.taobao.com/t?union_lens=lensId%3AOPT%401601203401%400b0f99df_a5b3_174cf28f3bb_ad79%4001%3BeventPageId%3A20150318020000648&e=m%3D2%26s%3Diaj%2F%2FMChDMNw4vFB6t2Z2iperVdZeJviePMclkcdtjxyINtkUhsv0K5mYvcBEhv8U9RX0Iw%2BkeJD415GGSsrJ4YxhNUZ2i3GTlT4SLzYDiBT2M421%2BABgTvflh4%2Fhqj89CGjsatFbg%2FkxFiXT%2FI5kdHG0mETTJw4I%2FQKsMyWv9lyeNAoQluSar7Bu%2FpJjtAXjXL88Z9Mt2nGDmntuH4VtA%3D%3D&pid=mm_0_0_0 https://s.click.taobao.com/t?union_lens=lensId%3AOPT%401602583439%400b5dc12f_df39_175216aa7d3_3ba4%4001%3BeventPageId%3A20150318020000813&e=m%3D2%26s%3DVSDHOXPRC4YcQipKwQzePCperVdZeJviePMclkcdtjxyINtkUhsv0LByEUqSWs8wxHXUNZRa3F5D415GGSsrJ4YxhNUZ2i3GTlT4SLzYDiBT2M421%2BABgTvflh4%2Fhqj89CGjsatFbg%2FkxFiXT%2FI5kdv2ej9RFznDujXyQ8P5hEAW95D0t3aOisosmJjNa%2FrGYpyF7ku%2BxKjfv8uao0UzJSWcMOnOtXCYRnn6ynij93lsDvbh8Qt7h%2F7mglw2LhJ8IdKpkygapz%2FOumdbRSBMWogPh2VpbvcT8PwOkD4ulZfxvNaaibhIncDlE6H93yEw17wnkme1OdGDcT9IgYeWFwpobexl%2Fx%2FZ&pid=mm_0_0_0 https://s.click.taobao.com/t?union_lens=lensId%3AOPT%401600161414%400b59e276_31e8_174910d7ee5_1434%4001%3BeventPageId%3A20150318020000406&e=m%3D2%26s%3D5LNEiCktsG5w4vFB6t2Z2iperVdZeJviePMclkcdtjxyINtkUhsv0KBG0TwCFKWFemLun%2Boqc%2FVD415GGSsrJ4YxhNUZ2i3GTlT4SLzYDiBT2M421%2BABgTvflh4%2Fhqj89CGjsatFbg%2FkxFiXT%2FI5kdv2ej9RFznDujXyQ8P5hEAW95D0t3aOisosmJjNa%2FrGraOxjvWhHnYV5fRYrrSW6WwO9uHxC3uHfE%2BH0gbC0KpkDV443qLdLqxZ2nVWPAAw2n9Az55wlDRExsN3p515W%2FKamps88B8EQWLobdpSETDGDF1NzTQoPw%3D%3D&&pid=mm_0_0_0 https://s.click.taobao.com/t?union_lens=lensId%3AOPT%401602583439%400b1a25d9_3fc2_175216aa7eb_ac58%4001%3BeventPageId%3A20150318020000814&e=m%3D2%26s%3D3q2KSPwGXwYcQipKwQzePCperVdZeJviePMclkcdtjxyINtkUhsv0LByEUqSWs8wxHXUNZRa3F5D415GGSsrJ4YxhNUZ2i3GTlT4SLzYDiBT2M421%2BABgTvflh4%2Fhqj89CGjsatFbg%2FkxFiXT%2FI5kdv2ej9RFznDujXyQ8P5hEAW95D0t3aOisosmJjNa%2FrGYpyF7ku%2BxKjfv8uao0UzJSWcMOnOtXCYRnn6ynij93lsDvbh8Qt7h%2F7mglw2LhJ8IdKpkygapz8i98XAIvg9KYgPh2VpbvcT8PwOkD4ulZfxvNaaibhIncDlE6H93yEw17wnkme1OdGDcT9IgYeWFwpobexl%2Fx%2FZ&pid=mm_0_0_0 https://www.etao.com/cjfl/info.htm?activityId=1495387 https://s.click.taobao.com/t?e=m%3D2%26s%3DaCBbXzf6%2Bp8cQipKwQzePDAVflQIoZepK7Vc7tFgwiFRAdhuF14FMTCw9kUE1PCMaqAeRGk4m9Lb6q32bH9H5L2YnZ7gs%2Faz&pid=mm_0_0_0 https://mo.m.taobao.com/union/live?pid=mm_0_0_0Process finished with exit code 0

總結

以上是生活随笔為你收集整理的Python学习 Day43 数据解析-BeautifulSoup 07的全部內容,希望文章能夠幫你解決所遇到的問題。

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