2016-08-30 3 views
1

Ich habe gerade angefangen, über reguläre Ausdrücke in Python zu lernen, und ich habe ein bisschen Fortschritte gemacht, was ich erreichen möchte.Python Regulärer Ausdruck Einen bestimmten Text zwischen den Headern finden

import urllib.request 
import urllib.parse 
import re 

x = urllib.request.urlopen("http://www.SOMEWEBSITE.com") 
contents = x.read() 

paragraphs = re.findall(r'<p>(.*?)</p>', str(contents)) 

Also mit diesem regulären Ausdruck Ich bin in der Lage, alles zwischen dem Absatz Header zu finden, aber was ist, wenn ich möchte sie mit bestimmten Worten Absätze finden? Analysieren Sie beispielsweise alle Absätze, in denen das Wort "Katze" enthalten ist. Ich weiß, dass (. *?) Alles findet, aber ich bin nur ein bisschen verloren in der Intuition, wenn ich einen Absatz mit einem bestimmten Schlüsselwort finde.

Wie auch immer, danke.

+5

Wenn Sie dieses Recht tun wollen, im Gegensatz zu ein bloßer Hack, benutze [BeautifulSoup] (https://en.wikipedia.org/wiki/Beautiful_Soup_ (HTML_parser)). – John1024

+0

Verwenden Sie Regex nicht zum Analysieren von HTML – depperm

+0

Als eine Übung, wie würde ich es mit Regex tun? – user2965071

Antwort

4

Es ist besser BeautifulSoup zu verwenden. Beispiel:

import urllib2 
html = urllib2.urlopen("http://www.SOMEWEBSITE.com").read() 
from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 

# now you can search the soup 

Dokumentation:

BeautifulSoup Doc

Aber ... wenn regex verwendet werden muss:

>>> str = "<p>This is some cat in a paragraph.</p>" 
>>> re.findall(r'<p>(.*cat.*)</p>', str) 
['This is some cat in a paragraph.'] 
+0

Da OP darauf besteht, dass er Regex nur zum Üben verwenden möchte, ist dies keine gültige Antwort für mich. (Ich bin nicht der Downvoter). –

+1

@AhsanulHaque Hinzugefügt Regex-Lösung jedoch erfindet dies das Rad neu. Trainieren? OK, aber definitiv nicht als endgültige Lösung. Es ist gut, dass das OP andere Methoden sieht, die für das Parsen von HTML bevorzugt werden. –