python中BeautifulSoup解析然後select提取到的內容如何用正則來來匹配?

BeautifulSoup解析然後select提取到的內容是bs4.element.Tag,如何用正則??

wb = requests.post(url,data=data,headers=header)
soup = BeautifulSoup(wb.text,"lxml")
shuzhi = soup.select("table.childTb")[0]
print shuzhi

獲取到的是如下內容

&

&&

時間&&CODcr[Avg]&&CODcr[Cou]&&pH[Avg]&&廢水流量[Cou]&&&&單位&&(mg/L)&&(Kg)&&(無量綱)&&M3&&&&00:00:00&&24.00&&0.46&&8.19&&19.00&&&&01:00:00&&24.00&&0.43&&8.20&&18.00&&&&02:00:00&&24.00&&0.46&&8.20&&19.00&&&&03:00:00&&24.00&&0.46&&8.20&&19.00&&&&04:00:00&&24.00&&0.46&&8.21&&19.00&&&&05:00:00&&24.00&&0.46&&8.22&&19.00&&&&06:00:00&&22.50&&0.43&&8.22&&19.00&&&&07:00:00&&22.00&&0.42&&8.23&&19.00&&&&08:00:00&&22.00&&0.44&&8.23&&20.00&&&&09:00:00&&22.00&&0.42&&8.22&&19.00&&...&

而我想用正則來取所需要的東西,該如何做??


bs4中正則的用途是過濾器,也就是說find或者findall中的參數部分會涉及到正則。

而題主所說的select是css選擇器,基本上是獨立於上面所說的過濾器方式,所以不會用到正則。

如果你需要提取標籤的文字部分,請用.text/get_text()

如果需要提取tag的屬性,直接用get()。

至於提取出來的屬性和文字都是字元串,這時候你想用正則進行進一步處理就很隨意了。

手機碼字真難受!

---------------------------------------在電腦上補充一下-------------------------------------------------

首先, 我們需要知道我們的目標是什麼:

  1. tag中的文字, 比如說超鏈接文本, 或者一些表格中的數據, 這屬於可以遍歷的字元串

  2. tag中的屬性, 比如圖片鏈接, 或者時下一頁的鏈接,或者其他需要的信息. 這屬於tag對象的屬性.

BeautifulSoup解析然後select提取到的內容是bs4.element.Tag,如何用正則??

樓主, 當你提取到了tag對象,不是想當然的就把一個tag對象當做字元串處理,直接用正則提取,如果tag"對象是字元串,一開始直接用正則就好了,沒必要用BeautifulSoup.

其實文檔中寫的很詳細,我在這裡只是指出樓主你認識上的一些錯誤, 文檔鏈接在下

Beautiful Soup 4.4.0 文檔----------------------------------------代碼區------------------------------------------------------------

提取表格內容不推薦用正則表達式, 我們可以把表格中的內容先用Beautifulsoup提取出來,再篩選, 如果你用正則表達式, 比如說 r"d+" 只能提取到一大堆數字, 並沒有實際意義, 下面是代碼

from bs4 import BeautifulSoup

html = """&

&&

時間&&CODcr[Avg]&&CODcr[Cou]&&pH[Avg]&&廢水流量[Cou]&&&&單位&&(mg/L)&&(Kg)&&(無量綱)&&M3&&&&00:00:00&&24.00&&0.46&&8.19&&19.00&&&&01:00:00&&24.00&&0.43&&8.20&&18.00&&&&02:00:00&&24.00&&0.46&&8.20&&19.00&&&&03:00:00&&24.00&&0.46&&8.20&&19.00&&&&04:00:00&&24.00&&0.46&&8.21&&19.00&&&&05:00:00&&24.00&&0.46&&8.22&&19.00&&&&06:00:00&&22.50&&0.43&&8.22&&19.00&&&&07:00:00&&22.00&&0.42&&8.23&&19.00&&&&08:00:00&&22.00&&0.44&&8.23&&20.00&&&&09:00:00&&22.00&&0.42&&8.22&&19.00&&...&"""

soup = BeautifulSoup(html, "lxml")
rows = soup.find_all("tr")
for row in rows:
cell = [i.text for i in row.find_all("td")]
print(cell)

["時間", "CODcr[Avg]", "CODcr[Cou]", "pH[Avg]", "廢水流量[Cou]"]
["單位", "(mg/L)", "(Kg)", "(無量綱)", "M3"]
["00:00:00", "24.00", "0.46", "8.19", "19.00"]
["01:00:00", "24.00", "0.43", "8.20", "18.00"]
["02:00:00", "24.00", "0.46", "8.20", "19.00"]
["03:00:00", "24.00", "0.46", "8.20", "19.00"]
["04:00:00", "24.00", "0.46", "8.21", "19.00"]
["05:00:00", "24.00", "0.46", "8.22", "19.00"]
["06:00:00", "22.50", "0.43", "8.22", "19.00"]
["07:00:00", "22.00", "0.42", "8.23", "19.00"]
["08:00:00", "22.00", "0.44", "8.23", "20.00"]
["09:00:00", "22.00", "0.42", "8.22", "19.00"]


推薦閱讀:

Python 家族有多龐大
Python數據分析及可視化實例之CentOS7.2+Python3x+Flask部署標準化配置流程
Flask 實現小說網站 (二)

TAG:Python | 爬蟲計算機網路 | 正則表達式 | beautiful |