Python3爬蟲學習筆記(4.BeautifulSoup庫詳解)
這是一個功能強大的庫,可以代替很多需要寫正則的地方
這是一個第三方解析庫,常規安裝方法:
調出cmd:pip install bs4
簡單瞭解:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>TITLE</title> </head> <body> <table border="1"> <tr>/ <td>第一行,第1列</td> <td>第一行,第2列</td><td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') #自動補全修正html文字 print(soup.prettify()) #獲得html的標題 print(soup.title.string)
標籤選擇器:
html = """ <html lang="en"><head> <meta charset="UTF-8"><title>TITLE</title> </head> <body> <table border="1"> <tr>/ <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.title) #<title>TITLE</title> print(soup.head) ''' <head> <meta charset="utf-8"/> <title>TITLE</title> </head> ''' print(soup.td) #只能獲取第一個,所以列印:<td>第一行,第1列</td>
獲取屬性:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr>/ <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.table["border"]) #1
獲取內容:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.table.tr.td.string) #第一行,第1列
子節點:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.table.tr.contents) #['\n', <td>第一行,第1列</td>, '\n', <td>第一行,第2列</td>, '\n', <td>第一行,第3列</td>, '\n']另外一種:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') for i, child in enumerate(soup.table.tr.children): print(i, child) ''' 0 1 <td>第一行,第1列</td> 2 3 <td>第一行,第2列</td> 4 5 <td>第一行,第3列</td> 6 可以看出.children實際上是一個迭代器。 '''
子孫節點:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') for i, child in enumerate(soup.table.descendants): print(i, child) ''' 0 1 <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> 2 3 <td>第一行,第1列</td> 4 第一行,第1列 5 6 <td>第一行,第2列</td> 7 第一行,第2列 8 9 <td>第一行,第3列</td> 10 第一行,第3列 11 12 '''
父節點:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.tr.parent) ''' <table border="1"> <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> '''
兄弟節點:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr> <td>第一行,第1列</td> <td>第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(list(enumerate(soup.td.next_siblings))) #[(0, '\n'), (1, <td>第一行,第2列</td>), (2, '\n'), (3, <td>第一行,第3列</td>), (4, '\n')] print(list(enumerate(soup.td.previous_siblings))) #[(0, '\n')]
標準選擇器(實用):
find_all詳解:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table border="1"> <tr> <td id="1">第一行,第1列</td> <td class="c1">第一行,第2列</td> <td>第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.find_all("td")) #[<td>第一行,第1列</td>, <td>第一行,第2列</td>, <td>第一行,第3列</td>] #可以遍歷輸出,這裡不寫了(td標籤裡面的內容是後邊臨時加的) print(soup.find_all(attrs={"id": "1"})) #[<td id="1">第一行,第1列</td>](臨時加的id) print(soup.find_all(id="1")) #[<td id="1">第一行,第1列</td>] print(soup.find_all(class_="c1")) #[<td class="c1">第一行,第2列</td>](臨時加的class) #注意這裡要加上下劃線 print(soup.find_all(text="第一行,第3列")) #['第一行,第3列']
find方法類似,只不過是把find_all方法獲取的列表裡面的第一個元素拿出來了,這裡就不仔細寫了。
CSS選擇器:
html = """ <html lang="en"><head> <meta charset="UTF-8"> <title>666</title> </head> <body> <table class="c0" border="1"> <tr id="0"> <td id="1">第一行,第1列</td> <td id="2" class="c1">第一行,第2列</td> <td id="3">第一行,第3列</td> </tr> </table> </body> </html>""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.select("tr td")) #[<td id="1">第一行,第1列</td>, <td class="c1">第一行,第2列</td>, <td>第一行,第3列</td>] print(soup.select(".c0 .c1")) #[<td class="c1">第一行,第2列</td>] print(soup.select("#0 .c1")) #[<td class="c1">第一行,第2列</td>] for td in soup.select("td"): print(td["id"]) #臨時加入的三個id,會遍歷輸出1,2,3 for td in soup.select("td"): print(td.get_text()) """ 第一行,第1列 第一行,第2列 第一行,第3列 """
相關推薦
Python3爬蟲學習筆記(4.BeautifulSoup庫詳解)
這是一個功能強大的庫,可以代替很多需要寫正則的地方 這是一個第三方解析庫,常規安裝方法: 調出cmd:pip install bs4 簡單瞭解: html = """ <html lang=
Python3爬蟲學習筆記(1.urllib庫詳解)
1.什麼是爬蟲:略,到處都有講解。 雖然是入門,不過沒有Python基礎的同學看起來可能費勁,建議稍學下Python 之前學習前端知識也是為了能看懂HTML,便於爬蟲學習,建議瞭解下前端知識 2.re
Python3爬蟲學習筆記(2.Requests庫詳解)
Requests庫功能相比Urllib庫更強大,也許是自帶的 如果沒有,cmd輸入pip install requests獲取即可 例項: import requests response = r
python爬蟲學習筆記二:Requests庫詳解及HTTP協議
Requests庫的安裝:https://mp.csdn.net/postedit/83715574 r=requests.get(url,params=None,**kwargs) 這個r是Response物件 url :擬獲取頁面的url連結 params:url中的額外引數
python爬蟲學習筆記四:BeautifulSoup庫對HTML文字進行操作
只要你提供的資訊是標籤,就可以很好的解析 怎麼使用BeautifulSoup庫? from bs4 import BeautifulSoup soup=BeautifulSoup('<p>data<p>','html.parser') 例如: import
【Python3 爬蟲學習筆記】部署相關庫的安裝
如果想要大規模抓取資料,那麼一定會用到分散式爬蟲。對於分散式爬蟲來說,我們需要多臺主機,每臺主機有多個爬蟲任務,但是原始碼其實只有一份。 對於Scrapy來說,它有一個擴充套件元件,叫作Scrapyd,我們只需要安裝該擴充套件元件,即可遠端管理Scrapy任務
python3爬蟲學習筆記(一)初入爬蟲 urllib學習
一、爬蟲是什麼 網路爬蟲(也叫做網頁蜘蛛),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。如果把網際網路比做成一個大的蜘蛛網,蜘蛛網上每個節點都有大量的資料,爬蟲就像一隻小蜘蛛通過網頁的地址找到網站並獲取資訊:HTML程式碼/JSON資料/二進位制資料(圖
python3語言學習筆記(六:模組+輸入輸出)
引入模組 import 模組名 使用時:模組名.函式名(引數) from 模組名 import 函式名 使用時:函式名(引數) import 模組名.* 使用時:函式名(引數) 格式化字串 方式一:使用str.format() 方式二:使用%格式化字串
Python基礎學習資料(語法、函式詳解)
目錄 目錄 1 常用函式 5 input() 5 int() 6 len() 7 list() 與tuple相對 8 tuple() 與list相對 9 sum() 10 max() 11 min() 12 print() 13 range() 14 set() 15 sorted() 16
【Python3 爬蟲學習筆記】基本庫的使用 11—— 正則表示式 4
4. findall() search()方法可以返回匹配正則表示式的第一個內容,但是如果想要獲取匹配正則表示式的所有內容,就要藉助findall()方法了。該方法會搜尋整個字串,然後返回匹配正則表示式的所有內容。 上一節中的HTML文字中,如果想要獲得所有a節點的超連結、歌手和歌名,就
【Python3 爬蟲學習筆記】解析庫的使用 4 —— Beautiful Soup 2
父節點和祖先節點 如果要獲取某個節點元素的父節點,可以呼叫parent屬性: html = """ <html> <head> <title>The Dormouse's story</title> </head> <
【Python3 爬蟲學習筆記】解析庫的使用 11 —— 使用pyquery 4
偽類選擇器 CSS選擇器之所以強大,還有一個很重要的原因,那就是它支援多種多樣的偽類選擇器,例如選擇第一個節點、最後一個節點、奇偶數節點、包含某一文字的節點等。示例如下: html = ''' <div class="wrap"> <div id="containe
【Python3 爬蟲學習筆記】解析庫的使用 6 —— Beautiful Soup 4
text text引數可用來匹配節點的文字,傳入的形式可以是字串,可以是正則表示式,可以是正則表示式物件,示例如下: import re html = ''' <div class="panel"> <div class="panel-body
Python爬蟲學習筆記(一)——urllib庫的使用
scheme param https ade 網站 dmgr nor 分享圖片 out 前言 我買了崔慶才的《Python3網絡爬蟲開發實戰》,趁著短學期,準備系統地學習下網絡爬蟲。在學習這本書的同時,通過博客摘錄並總結知識點,同時也督促自己每日學習。本書第一章是開發環境的
Python爬蟲學習筆記(二)——requests庫的使用
pip 安裝 .text rep 瀏覽器 ror clas ade 學習筆記 準備工作 requests庫不是python自帶的庫,可以用pip安裝。在使用時導入requests即可。 基本用法 GET請求 r = requests.get(url) print(r.tex
【Python3 爬蟲學習筆記】基本庫的使用 8—— 正則表示式 1
三、正則表示式 1.例項引入 開啟開源中國提供的正則表示式測試工具 http://tool.oschina.net/regex/ ,輸入待匹配的文字,然後選擇常用的正則表示式,就可以得出相應的匹配結果。 對於URL來說,可以用下面的正則表示式匹配: [a-zA-z]+://[^\
【Python3 爬蟲學習筆記】基本庫的使用 7 —— 使用requests
抓取二進位制資料 前面我們抓取知乎的一個頁面,實際上它返回的是一個HTML文件。如何抓取圖片、音訊、視訊? 圖片、音訊、視訊這些檔案本質上都是由二進位制碼組成的,由於有特定的儲存格式和對應的解析方式,我們才可以看到這些形形色色的多媒體,所以要抓取它們,就要拿到它們的二進位制碼。 抓取
【Python3 爬蟲學習筆記】基本庫的使用 12—— 正則表示式 5
6. compile() compile()方法可以將正則字串編譯成正則表示式物件,以便在後面的匹配中複用。示例程式碼如下: import re content1 = '2016-12-15 12:00' content2 = '2016-12-17 12:55' content3
【Python3 爬蟲學習筆記】基本庫的使用 10—— 正則表示式 3
3.search() mathch()方法是從字串的開頭開始匹配的,一旦開頭不匹配,那麼整個匹配就失敗了。因為match()方法在使用時需要考慮到開頭的內容,這在匹配時並不方便。它更適合用來檢測某個字串是否符合某個正則表示式的規則。 search()方法在匹配時會掃描整個字串,然後返回第
【Python3 爬蟲學習筆記】基本庫的使用 9—— 正則表示式 2
1.1 匹配目標 如果想從字串中提取出一部分內容,可以用()括號將想提取的子字串括起來。()實際上標記了一個子表示式的開始和結束位置,被標記的每個子表示式會一次對應一個分組,呼叫group()方法傳入分組的索引即可獲取提取的結果。示例如下: import re content =