人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python數(shù)據(jù)解析BeautifulSoup爬取三國(guó)演義章節(jié)示例

發(fā)布日期:2021-12-30 00:54 | 文章來(lái)源:腳本之家

數(shù)據(jù)解析

數(shù)據(jù)解析就是將爬取到的整個(gè)頁(yè)面中的局部的內(nèi)容進(jìn)行提取。python中常用的數(shù)據(jù)解析方式有以下三種:

  • bs4(python中獨(dú)有的)
  • xpath(推薦,通用型強(qiáng))
  • 正則

數(shù)據(jù)解析原理概述:

首先我們知道需要解析(提?。┑膬?nèi)容都會(huì)在標(biāo)簽之間或者標(biāo)簽對(duì)應(yīng)的屬性中進(jìn)行存儲(chǔ)

所以我們需進(jìn)行指定標(biāo)簽的定位

然后將標(biāo)簽或者標(biāo)簽對(duì)應(yīng)的屬性中存儲(chǔ)的數(shù)據(jù)值進(jìn)行提?。ń馕觯?/p>

Beautiful Soup

Beautiful Soup 是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)。其只能運(yùn)用在python語(yǔ)言中

bs4數(shù)據(jù)解析原理

實(shí)例化一個(gè)BeautifulSoup對(duì)象,并且將頁(yè)面源碼數(shù)據(jù)加載到該對(duì)象中。而將頁(yè)面源碼數(shù)據(jù)加載到該對(duì)象中有兩種方式,一種是將本地得html文檔加載,另一種是將互聯(lián)網(wǎng)上獲取的頁(yè)面源碼加載通過(guò)

調(diào)用BeautifulSoup對(duì)象中相關(guān)的屬性或者方法進(jìn)行標(biāo)簽定位和數(shù)據(jù)提取

要使用bs4首先需要先下載對(duì)應(yīng)的包

pip install bs4

pip install -i https://mirrors.aliyun.com/pypi/simple/ lxml

Beautiful Soup用法

提取整個(gè)標(biāo)簽數(shù)據(jù)

進(jìn)行標(biāo)簽定位常用的幾個(gè)方法如下

soup.標(biāo)簽名 返回的是html中第一次出現(xiàn)的標(biāo)簽

soup.find(標(biāo)簽名) 返回第一次出現(xiàn)的這個(gè)標(biāo)簽

soup.find_all(標(biāo)簽名)) 返回符合要求的所有標(biāo)簽

soup.select(標(biāo)簽名) 返回符合要求的所有標(biāo)簽

from bs4 import BeautifulSoup #導(dǎo)包
html = """
<html lang="en">
 <head>
<meta charset="utf-8">
<meta name="theme-color" content="#ffffff">
<base href="./" rel="external nofollow" ><link rel="stylesheet" href="styles.30d0912c1ece284d8d9a.css" rel="external nofollow" >
 </head>
 <body>
  <div>
<p>百里守約</p>
  </div>
  <div class="song">
<p>前程似錦</p>
  </div>
  <div class="song">
<p>前程似錦2</p>
  </div>
  <div class="ming">  #后面改了名字
<p>以夢(mèng)為馬</p>
  </div>  
  <div class="tang">
<ul>
 <li><a  title='qing'>清明時(shí)節(jié)</a></li>
 <li><a  title='qing'>秦時(shí)明月</a></li>
 <li><a  title='qing'>漢時(shí)關(guān)</a></li>
</ul>
  </div>
<flink-root></flink-root>
  <script type="text/javascript" src="runtime.0dcf16aad31edd73d8e8.js"></script><script type="text/javascript" src="es2015-polyfills.923637a8e6d276e6f6df.js" nomodule></script><script type="text/javascript" src="polyfills.bb2456cce5322b484b77.js"></script><script type="text/javascript" src="main.8128365baee3dc30e607.js"></script>
 </body>
</html>
"""
#實(shí)例化一個(gè)BeautifulSoup對(duì)象,并且將本地的源碼數(shù)據(jù)加載到該對(duì)象中。且使用html.parser進(jìn)行數(shù)據(jù)解析
soup = BeautifulSoup(html,'html.parser')
print(soup.meta)#輸出<meta charset="utf-8">
print(soup.p)#輸出<p>百里守約</p>
 
#find
print(soup.find('div'))  #輸出<div><p>百里守約</p></div>
#這里有多個(gè)div標(biāo)簽,根據(jù)屬性定位,因?yàn)閏lass為關(guān)鍵字,所以這里加_
print(soup.find('div',class_="song"))#<p>前程似錦</p>
 
#find_all
print(soup.find_all('p'))  #[<p>百里守約</p>, <p>前程似錦</p>, <p>前程似錦2</p>, <p>以夢(mèng)為馬</p>]
print(soup.select('.tang'))  #將這個(gè)選擇器中的所有內(nèi)容提取
print(soup.select('.tang > ul > li > a')[1])  #返回ul中的li中的所有a標(biāo)簽中的第二個(gè)a標(biāo)簽 <a  rel="external nofollow"  title="qing">秦時(shí)明月</a>

提取標(biāo)簽中的內(nèi)容和標(biāo)簽的屬性值

#獲取標(biāo)簽中的內(nèi)容
print(soup.p.text)#輸出百里守約
print(soup.find('div',class_="ming").text)  #以夢(mèng)為馬
print(soup.find('div',class_="song"))
print(soup.select('.tanga')[0].text)#清明時(shí)節(jié)
 
#獲取標(biāo)簽中的屬性值,如a標(biāo)簽中的href值
print(soup.select('.tanga')[0]['href'])  #http://123.com

案例—爬取三國(guó)演義章節(jié)及對(duì)應(yīng)的內(nèi)容

網(wǎng)站如下,網(wǎng)站數(shù)據(jù)的獲取不是通過(guò)ajax發(fā)送的請(qǐng)求

import requests
from bs4 import BeautifulSoup
url = 'https://so.gushiwen.org/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx'
headers={
 'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36'
}
pag_content = requests.get(url,headers,timeout=4).text
#print(pag_content)
#提取每章節(jié)內(nèi)容的鏈接
soup = BeautifulSoup(pag_content,'html.parser')
a_text = soup.select('.bookcont a')  #將其下面的所有a標(biāo)簽提取出來(lái) 
for i in a_text:
 #獲取a標(biāo)簽中的href屬性的值
 detail_url = i['href']
 #請(qǐng)求詳細(xì)內(nèi)容的url的內(nèi)容
 detail_content = requests.get(detail_url,headers,timeout=4).text
 soup = BeautifulSoup(detail_content,'html.parser')
 #提取class標(biāo)簽
 class_content = soup.find('div',class_='contson')
 #print(class_content)  #該標(biāo)簽中有很多p標(biāo)簽,返回整個(gè)class_content標(biāo)簽
 #print(class_content.text)#獲取其所有的內(nèi)容
 with open('三國(guó)演義.txt','a',encoding='utf-8') as f:
  f.write(i.text+'\r')
  f.write(class_content.text+'\r')
 print(f'爬取{i.text}ok')
print('全部ok')

以上就是python數(shù)據(jù)解析BeautifulSoup爬取三國(guó)演義章節(jié)示例的詳細(xì)內(nèi)容,更多關(guān)于BeautifulSoup爬取三國(guó)演義章節(jié)的資料請(qǐng)關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部