python beautifulsoup提取cdata数据

最近在玩爬虫,遇到一个网址,里面的内容有个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

相关文章
相关标签/搜索