2017-11-03 3 views
1

Ich möchte einen bestimmten Teil eines Tags mit beautifulsoup erhalten, aber ich kann nicht. Der Tag ist:Holen Sie sich ein Tag mit beautifoulsoup

<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> 

, während der Teil, den ich nur 2009-04-21 ist wollen. Wie kann ich es mit BS4 tun?

Antwort

0

Ich bin nicht sehr geschickt im Umgang mit mit regex aber man kann versuchen zu tun somenthing wie:

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) 

Diese beliebige Zeichenfolge mit 9999-99-99 Format gedruckt wird. Es ist wichtig zu sagen, dass diese Regex den Monat nicht auf 1-12 und die Tage von 1 bis 31 beschränkt.

Sie können auch die Kurzschrift Regex \d{4}-\d{2}-\d{2} stattdessen verwenden.

0
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']) 

Die letzte Zeile ist die einzige wichtige, .data ist der Tag, oder können wir soup.find('data') und wir verwenden den Schlüssel des Attributs verwenden, um die erforderlichen Daten zu extrahieren. Wie der StackOverFlower über mir erwähnt, können Sie auch re oder Regex verwenden, aber es ist langsam und Sie müssen einige Vorkenntnisse davon haben, um zu verstehen, wie es funktioniert, auch wenn er es wirklich gut erklärt. Hoffentlich beantwortet das deine Frage.

Also das ist der richtige Weg, es mit BeautifulSoup zu tun, wie Sie gebeten, nicht re zu verwenden.

0

give it a go:

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('"','')) 

Ergebnis:

2009-04-21 
Verwandte Themen