日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

來源:Python/ target=_blank class=infotextkey>Python數(shù)據(jù)之道

作者:Peter

整理:陽哥

大家好,我是陽哥。

今天來跟大家分享用 BeautifulSoup 獲取信息的一些知識(shí)點(diǎn),文章內(nèi)容由公眾號(hào)讀者 Peter 創(chuàng)作。

歡迎各位童鞋向公眾號(hào)投稿,點(diǎn)擊下面圖片了解詳情!

爬蟲,是學(xué)習(xí)Python的一個(gè)有用的分支,互聯(lián)網(wǎng)時(shí)代,信息浩瀚如海,如果能夠便捷的獲取有用的信息,我們便有可能領(lǐng)先一步,而爬蟲正是這樣的一個(gè)工具。


Beautiful Soup 是一個(gè)可以從html或XML文件中提取數(shù)據(jù)的Python庫。由于 BeautifulSoup 是基于 Python,所以相對(duì)來說速度會(huì)比另一個(gè) Xpath 會(huì)慢點(diǎn),但是其功能也是非常的強(qiáng)大,本文會(huì)介紹該庫的基本使用方法,幫助讀者快速入門。

網(wǎng)上有很多的學(xué)習(xí)資料,但是超詳細(xì)學(xué)習(xí)內(nèi)容還是非官網(wǎng)莫屬,資料傳送門:

英文官網(wǎng):
https://www.crummy.com/software/BeautifulSoup/bs4/doc/

中文官網(wǎng):
https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

本文的主要內(nèi)容如下:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

安裝和使用

安裝

安裝過程非常簡(jiǎn)單,直接使用pip即可:

pip install beautifulsoup4

上面安裝庫最后的4是不能省略的,因?yàn)檫€有另一個(gè)庫叫作 beautifulsoup,但是這個(gè)庫已經(jīng)停止開發(fā)了。

因?yàn)锽S4在解析數(shù)據(jù)的時(shí)候是需要依賴一定的解析器,所以還需要安裝解析器,我們安裝強(qiáng)大的lxml:

pip install lxml

在python交互式環(huán)境中導(dǎo)入庫,沒有報(bào)錯(cuò)的話,表示安裝成功。

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

使用

使用過程直接導(dǎo)入庫:

from bs4 import BeautifulSoup

解析原理

解析原理

  • 實(shí)例化一個(gè)BeautifulSoup對(duì)象,并且將本地或者頁面源碼數(shù)據(jù)加載到該對(duì)象中
  • 通過調(diào)用該對(duì)象中相關(guān)的屬性或者方法進(jìn)行標(biāo)簽定位和數(shù)據(jù)提取

如何實(shí)例化BeautifulSoup對(duì)象

  1. 將本地的HTML文檔中的數(shù)據(jù)加載到BS對(duì)象中
  2. 將網(wǎng)頁上獲取的頁面源碼數(shù)據(jù)加載到BS對(duì)象中

案例解析

原數(shù)據(jù)

假設(shè)我們現(xiàn)在本地有一個(gè)HTML文件待解析,具體內(nèi)容如下,數(shù)據(jù)中有各種HTML標(biāo)簽:html、head、body、div、p、a、ul、li等

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

加載數(shù)據(jù)

from bs4 import BeautifulSoup

fp = open('./test.html','r',encoding='utf-8')  # 打開本地文件
soup = BeautifulSoup(fp,'lxml')
soup
Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

所有的數(shù)據(jù)解析都是基于soup對(duì)象的,下面開始介紹各種解析數(shù)據(jù)方法:

soup.tagName

soup.TagName返回的是該標(biāo)簽第一次出現(xiàn)的內(nèi)容,以a標(biāo)簽為例:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

數(shù)據(jù)中多次出現(xiàn)a標(biāo)簽,但是只會(huì)返回第一次出現(xiàn)的內(nèi)容

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

我們?cè)倏聪耫iv標(biāo)簽:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

出現(xiàn)了2次,但是只會(huì)返回第一次的內(nèi)容:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

soup.find('tagName')

find()主要是有兩個(gè)方法:

  • 返回某個(gè)標(biāo)簽第一次出現(xiàn)的內(nèi)容,等同于上面的soup.tagName
  • 屬性定位:用于查找某個(gè)有特定性質(zhì)的標(biāo)簽

1、返回標(biāo)簽第一次出現(xiàn)的內(nèi)容:

比如返回a標(biāo)簽第一次出現(xiàn)的內(nèi)容:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

再比如返回div標(biāo)簽第一次出現(xiàn)的內(nèi)容:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

2、屬性定位

比如我們想查找a標(biāo)簽中id為“谷歌”的數(shù)據(jù)信息:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

在BS4中規(guī)定,如果遇到要查詢class情況,需要使用class_來代替:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

但是如果我們使用attrs參數(shù),則是不需要使用下劃線的:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

soup.find_all()

該方法返回的是指定標(biāo)簽下面的所有內(nèi)容,而且是列表的形式;傳入的方式是多種多樣的。

1、傳入單個(gè)指定的標(biāo)簽

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

image-20210523170401516

上面返回的是列表形式,我們可以獲取我們想要的內(nèi)容:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

2、傳入多個(gè)標(biāo)簽(列表形式)

需要主要返回內(nèi)容的表達(dá)形式,每個(gè)標(biāo)簽的內(nèi)容是單獨(dú)顯示的

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

3、傳入正則表達(dá)式

比如查看以a開頭標(biāo)簽的全部?jī)?nèi)容

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

查看以li標(biāo)簽開頭的全部?jī)?nèi)容:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

選擇器soup.select()

主要是有3種選擇器,返回的內(nèi)容都是列表形式

  • 類選擇器:點(diǎn)
  • id選擇器:#
  • 標(biāo)簽選擇器:直接指定標(biāo)簽名

1、類選擇器

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

2、id選擇器

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 


Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

3、標(biāo)簽選擇器

直接指定li標(biāo)簽

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

4、選擇器和find_all()可以達(dá)到相同的效果:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

soup.tagName和soup.find('tagName')的效果也是相同的:

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

層級(jí)選擇器使用

在soup.select()方法中是可以使用層級(jí)選擇器的,選擇器可以是類、id、標(biāo)簽等,使用規(guī)則:

  • 單層:>
  • 多層:空格

1、單層使用

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

2、多層使用

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

獲取標(biāo)簽文本內(nèi)容

獲取某個(gè)標(biāo)簽中對(duì)應(yīng)文本內(nèi)容主要是兩個(gè)屬性+一個(gè)方法:

  • text
  • string
  • get_text()

1、text

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

2、string

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

3、get_text()

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

3者之間的區(qū)別

# text和get_text():獲取標(biāo)簽下面的全部文本內(nèi)容
# string:只能獲取到標(biāo)簽下的直系文本內(nèi)容
Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

獲取標(biāo)簽屬性值

1、通過選擇器來獲取

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

2、通過find_all方法來獲取

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

BeautifulSoup實(shí)戰(zhàn)

下面介紹的是通過BeautifulSoup解析方法來獲取某個(gè)小說網(wǎng)站上古龍小說名稱和對(duì)應(yīng)的URL地址。

網(wǎng)站數(shù)據(jù)

我們需要爬取的數(shù)據(jù)全部在這個(gè)網(wǎng)址下:
https://www.kanunu8.com/zj/10867.html,右鍵“檢查”,查看對(duì)應(yīng)的源碼,可以看到對(duì)應(yīng)小說名和URL地址在源碼中位置

每行3篇小說在一個(gè)tr標(biāo)簽下面,對(duì)應(yīng)的屬性href和文本內(nèi)容就是我們想提取的內(nèi)容。

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

獲取網(wǎng)頁源碼

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re

url = 'https://www.kanunu8.com/zj/10867.html'
headers = {'user-agent': '個(gè)人請(qǐng)求頭'}

response = requests.get(url = url,headers = headers)
result = response.content.decode('gbk')   # 該網(wǎng)頁需要通過gbk編碼來解析數(shù)據(jù)
# result

實(shí)例化BeautifulSoup對(duì)象

soup1 = BeautifulSoup(result,'lxml')
# print(soup1.prettify())  美化輸出源碼內(nèi)容

獲取名稱和URL地址

1、先獲取整體內(nèi)容

兩個(gè)信息全部指定a標(biāo)簽中,我們只需要獲取到a標(biāo)簽,通過兩個(gè)屬性href和target即可鎖定:

# 兩個(gè)屬性href和target,不同的方法來鎖定

information_list = soup1.find_all('a',href=re.compile('^/book'),target='_blank')
information_list
Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

2、再單獨(dú)獲取兩個(gè)信息

通過屬性來獲取URL地址,通過文本來獲取名稱

url_list = []
name_list = []

for i in information_list:
    url_list.Append(i['href'])  # 獲取屬性
    name_list.append(i.text)  # 獲取文本
Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 


Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

3、生成數(shù)據(jù)幀

gulong = pd.DataFrame({
    "name":name_list,
    "url":url_list}
)

gulong
Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

我們發(fā)現(xiàn)每部小說的具體地址其實(shí)是有一個(gè)公共前綴的:
https://www.kanunu8.com/book,現(xiàn)在給加上:

gulong['url'] = 'https://www.kanunu8.com/book' + gulong['url']   # 加上公共前綴
gulong.head()
Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

另外,我們想把書名的《》給去掉,使用replace替代函數(shù):

gulong["name"] = gulong["name"].apply(lambda x:x.replace("《",""))  # 左邊
gulong["name"] = gulong["name"].apply(lambda x:x.replace("》","")) # 右邊

# 保存
gulong.to_csv("gulong.csv",index=False)  # 保存到本地的csv文件

最后顯示的前5行數(shù)據(jù):

Python爬蟲快速入門,BeautifulSoup基本使用及實(shí)踐

 

總結(jié)

本文從BeautifulSoup4庫的安裝、原理以及案例解析,到最后結(jié)合一個(gè)實(shí)際的爬蟲實(shí)現(xiàn)介紹了一個(gè)數(shù)據(jù)解析庫的使用,文中介紹的內(nèi)容只是該庫的部分內(nèi)容,方便使用者快速入門,希望對(duì)讀者有所幫助。

分享到:
標(biāo)簽:BeautifulSoup
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定