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()。
至於提取出來的屬性和文字都是字元串,這時候你想用正則進行進一步處理就很隨意了。
手機碼字真難受!---------------------------------------在電腦上補充一下-------------------------------------------------首先, 我們需要知道我們的目標是什麼:- tag中的文字, 比如說超鏈接文本, 或者一些表格中的數據, 這屬於可以遍歷的字元串
- 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 實現小說網站 (二)