获取beautifoulsoup标签

时间:2017-11-03 18:34:24

标签: beautifulsoup tags

我想用beautifulsoup获取标签的特定部分,但我不能。 标签是:

<a class="grey-dark" href="/projects/perry/grace-jones-does-not-give-a-f-t-shirt-limited-edition-0/comments?cursor=4#comment-3"><data class="Comment3" data-format="distance_date" data-value="&quot;2009-04-21T15:29:45-04:00&quot;" itemprop="Comment[created_at]">on April 21, 2009</data></a>

虽然我想要的部分只有2009-04-21。我怎么能用bs4呢?

3 个答案:

答案 0 :(得分:0)

我对正则表达式并不熟悉,但你可以尝试像以下一样进行修饰:

import re
[...]

html = '<a class="grey-dark" href="/projects/perry/grace-jones-does-not-give-a-f-t-shirt-limited-edition-0/comments?cursor=4#comment-3"><data class="Comment3" data-format="distance_date" data-value="&quot;2009-04-21T15:29:45-04:00&quot;" itemprop="Comment[created_at]">on April 21, 2009</data></a>'
m = re.search('[0-9]{4}-[0-9]{2}-[0-9]{2}', html)
if m:
    print m.group(0)

这将打印9999-99-99格式的任何字符串。重要的是要说,这个正则表达式不会将月份限制在1-12,将日期限制在1到31之间。

此外,您可以使用简写正则表达式\d{4}-\d{2}-\d{2}

答案 1 :(得分:0)

d=collections.defaultdict(dict)
for k1,k2,v in s1 : d[k1][k2]=v 

#defaultdict(dict,
#       {1: {'D': 3, 'I': 10, 'K': 0.0, 'R': 4},
#        2: {'D': 13, 'I': 1, 'K': 6, 'R': 11},
#        3: {'D': 17, 'I': 23, 'K': 10, 'R': 12}})

In [67]: d[2]['K']
Out[67]: 6

最后一行是唯一重要的一行,.data是标记,或者我们可以使用from bs4 import BeautifulSoup as bs a = '''<a class="grey-dark" href="/projects/perry/grace-jones-does-not-give-a-f-t-shirt-limited-edition-0/comments?cursor=4#comment-3"><data class="Comment3" data-format="distance_date" data-value="&quot;2009-04-21T15:29:45-04:00&quot;" itemprop="Comment[created_at]">on April 21, 2009</data></a> ''' soup = bs(a, 'lxml') print(soup.data['data-value']) ,我们使用属性的键来提取所需的数据。 就像我上面提到的StackOverFlower一样,你也可以使用soup.find('data')或正则表达式,但速度很慢,你必须先了解它,以便了解它是如何工作的,即使他解释得非常好。希望能回答你的问题。

这就是使用re的正确方法,就像您要求不使用BeautifulSoup一样。

答案 2 :(得分:0)

试一试:

html_content='''
<a class="grey-dark" href="/projects/perry/grace-jones-does-not-give-a-f-t-shirt-limited-edition-0/comments?cursor=4#comment-3">
<data class="Comment3" data-format="distance_date" data-value="&quot;2009-04-21T15:29:45-04:00&quot;" itemprop="Comment[created_at]">on April 21, 2009</data></a>
'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content,"lxml")
item = soup.select(".Comment3")[0]['data-value'].split("T")[0]
print(item.replace('"',''))

结果:

2009-04-21