2016-08-29 2 views
-1

Ich lerne Web-Verschrottung mit Python. Ich versuche, alle Verbindungen von einer der Site-Karte der populären finanziellen Site zu extrahieren.Python regulären Ausdruck gibt nichts für die Übereinstimmung

bsObj = BeautifulSoup(html, "html.parser") 

for link in bsObj.findAll("a", 
href=re.compile("^(/india/stockmarket/pricechartquote/)*$")): 

    if 'href' in link.attrs: 
     print(link.attrs['href']) 
print('found nothing') 

Dieser Code findet nichts. Obwohl viele Links mit obigen Übereinstimmungen in der Site vorhanden sind. Beispiel:/Indien/Börse/pricechartquote/A

+0

ist 'href = ...' Zeile richtig eingerückt? – depperm

Antwort

2

Haben Sie versucht, zu überprüfen, ob diese regex die bereitgestellte Teil einer URL entspricht - es funktioniert nicht:

>>> import re 
>>> 
>>> pattern = re.compile("^(/india/stockmarket/pricechartquote/)*$") 
>>> pattern.search("/india/stockmarket/pricechartquote/A") 
>>> 

Stattdessen soll man den letzten Teil haben nach dem pricechartquote/ Matching, zum Beispiel eines oder mehr Großbuchstaben:

>>> pattern = re.compile(r"^/india/stockmarket/pricechartquote/[A-Z]+$") 
>>> pattern.search("/india/stockmarket/pricechartquote/A") 
<_sre.SRE_Match object at 0x109240098> 

Bitte stellen Sie den [A-Z]+ Teil je nachdem, welche Art von Zeichensatz nachzu erwarten 0.


Beachten Sie auch, dass Sie sich den Anfang und das Ende der Zeichenfolge nicht zu überprüfen und könnte gut sein, mit einem Teil url Spiel zu gehen:

for link in bsObj.find_all("a", href=re.compile(r"/india/stockmarket/pricechartquote/")): 
    # ... 
+0

Was ist, wenn ich wilde Zeichen nach/paychartquote finden möchte? Kann ich nicht etwa folgendes verwenden: '^ (/ india/stockmarket/purchetchquote/*) $'? –

+0

@BhaveshGhodasara können Sie einfach '/ india/stockmarket/purchetchquote /.*' oder wenn Sie wollen, dass der Platzhalter nicht mit '/' übereinstimmt, können Sie etw wie '/ india/stockmarket/pricechartquote/[^ /] +' machen . – alecxe

+0

@alexce why /india/stockmarket/pricechartquote/.* wird funktionieren und warum/india/stockmarket/pricechartquote/* wird nicht funktionieren? –

Verwandte Themen