最近在玩爬蟲,遇到一個網址,裏面的內容有個CDATA的數據,而後beautifulesoup就受挫了,可是正則又寫很差,該怎麼辦呢?html
查了下資料,找到了解析這種數據的方法編碼
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數據的節點url
而後能夠spa
第一種方式code
soup.find(text=lambda tag: isinstance(tag, CData)).string.strip()
可是這種寫法若是解析出來的是亂碼,那我又不知道該怎麼轉換文字編碼,因此就用第二種xml
第二種寫法htm
for cd in soup.findAll(text=True): if isinstance(cd, CData): print(cd) ss=BeautifulSoup(cd,'lxml') print('--------') print(ss.text)
其實我以爲,這樣寫還不如用正則,因此會正則的仍是用正則吧blog
下面是參考網址ip
https://stackoverflow.com/questions/34639623/using-beautifulsoup-to-extract-cdata?noredirect=1utf-8
https://stackoverflow.com/questions/2032172/how-can-i-grab-cdata-out-of-beautifulsoup