python beautifulsoup提取cdata數據


最近在玩爬蟲,遇到一個網址,里面的內容有個CDATA的數據,然后beautifulesoup就受挫了,但是正則又寫不好,該怎么辦呢?

查了下資料,找到了解析這種數據的方法

import requests
from bs4 import BeautifulSoup,CData
import re

def get_Response(_url):
    temp_response=requests.get(_url)
    #print(response.content.decode('utf-8'))
    temp_response.encoding='utf-8'
    #print(temp_response.text)
    return temp_response
response=get_Response('http://www.ninghai.gov.cn/col/col111591/index.html')
html=response.text
soup=BeautifulSoup(html,'lxml')
msg=soup.find('table',attrs={'class':'btlb'})
#print(msg.find('a',attrs={'target':'_blank'}))
print(msg.text)

其中msg.text就是包含着那塊CDATA數據的節點

然后可以

第一種方式

soup.find(text=lambda tag: isinstance(tag, CData)).string.strip()

但是這種寫法如果解析出來的是亂碼,那我又不知道該怎么轉換文字編碼,所以就用第二種

第二種寫法

for cd in soup.findAll(text=True):
    if isinstance(cd, CData):
        print(cd)
        ss=BeautifulSoup(cd,'lxml')
        print('--------')
        print(ss.text)

其實我覺得,這樣寫還不如用正則,所以會正則的還是用正則吧

 

下面是參考網址

https://stackoverflow.com/questions/34639623/using-beautifulsoup-to-extract-cdata?noredirect=1

https://stackoverflow.com/questions/2032172/how-can-i-grab-cdata-out-of-beautifulsoup


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM