您的位置:首页技术文章
文章详情页

python爬数据,得到一个列表,但怎样去掉里面的span标签呢?

【字号: 日期:2022-07-11 09:18:11浏览:37作者:猪猪

问题描述

用p6ython3.6爬下了部分数据,但是最后显示的是含span标签的列表,当我用get_text、contents等方法,就会报错。这是为什么呢?最开始返回的结果如下:

[<span>2017.5.2</span>][<span>2017.4.26</span>][<span>2017.4.24</span>][<span>2017.4.19</span>][<span>2017.3.23</span>][<span>2017.3.17</span>][<span>2017.2.14</span>][<span>2017.2.9</span>][<span>2017.2.6</span>][<span>2017.2.6</span>]

我的代码如下:

import requestsfrom bs4 import BeautifulSoupimport re# def url_list():# for number in range(1,21):# url_links=[]# url='X'.format(i=number)# url_links.append(url)h={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36'}r=requests.get('url',headers=h)soup=BeautifulSoup(r.text,’lxml’)for data in soup.find('p',{'class':'list-main-eventset-finan'}).find_all('li'): content=data.find('i',{'class':'cell date'}).find_all('span') print(time)

问题解答

回答1:

bs的API记得不是很清楚了,应该是有可以直接获取文本的函数的,应该是get_text()这个函数吧。由于你用的是find_all(),那么需要再在返回的结果下做一次遍历,就是这样

rs = list()for data in soup.find('p',{'class':'list-main-eventset-finan'}).find_all('li'): contents=data.find('i',{'class':'cell date'}).find_all('span') for content in contents:rs.append(content.get_text())

此外,也可以使用正则表达式来匹配,直接匹配<span>(.*?)<这个pattern。但是也得像上面那样遍历这个contens列表才行。

回答2:

题主可以试试 text_content() 方法

回答3:

正则表达式或者split+SUBSTRING也可以,灵活着用

标签: Python 编程