2017-11-23 4 views
1

Ich bin neu im Bereich Webskraping und reguläre Ausdrücke und habe hier ein Problem. Einer meiner Code gibt mir eine Ausgabe in HTML, aber ich muss einen bestimmten Teil aus dem Absatz extrahieren und nicht den vollständigen Absatz. Ich brauche Hilfe mit diesem. Unten ist mein Code.So extrahieren Sie bestimmte Teile eines HTML-Absatzes

import mechanize 
from bs4 import BeautifulSoup 
import urllib2 
br = mechanize.Browser() 
response = br.open("http://www.consultadni.info/index.php") 
br.select_form(name="form1") 
br['APE_PAT']='PATRICIO' 
br['APE_MAT']='GAMARRA' 
br['NOMBRES']='MARCELINA' 
req=br.submit().read() 
soup = BeautifulSoup(req, "lxml") 
for link in soup.findAll("a"): 
    sub=link.get("href") 
    soup1 = BeautifulSoup(sub, "lxml") 
    print soup1.find_all('p') 

Ausgabe auf dem Bildschirm:

[<p>/</p>] 
[<p>datospersonales.php?nc=PATRICIO GAMARRA MARCELINA&amp;dni1=40772568&amp;dni2=12405868&amp;id1=12a40a58a68&amp;id2=30/06/1980&amp;dni3=40631880</p>] 
[<p>datospersonales.php?nc=PATRICIO GAMARRA MARCELINA&amp;dni1=40772568&amp;dni2=12405868&amp;id1=12a40a58a68&amp;id2=30/06/1980&amp;dni3=40631880</p>] 
[<p>http://www.infocorpperuconsultatusdeudas.blogspot.com/2015/05/infocorp-consulta-gratis-tu-reporte-de.html?ref=dnionline</p>] 

Was ich brauche: 30/06/1980 & 40631880

+1

Versuch zu analysieren 'sub' mit [' urllib.parse.parse_qs'] (https://docs.python.org/3/library/urllib.parse.html) ein Wörterbuch von Variablen und Werte zu erhalten . –

+0

ParseResult (Schema = '', NetLoc = '', Pfad = 'tmp', Parameter = '', Abfrage = '', Fragment = '') ParseResult (Schema = '', NetLoc = '', Pfad = ' tmp ', params =' ', query =' ', fragment =' ') ParseResult (Schema =' ', NetLoc =' ', Pfad =' tmp ', Parameter =' ', Abfrage =' ', Fragment =' ') – Sandrachuz

+0

Ich bin neu in Regex, also was sollte die Regex dafür sein? – Sandrachuz

Antwort

0

für Python 2.7 try auf diese Weise:

from urlparse import parse_qs 

result = set() 

for link in soup.find_all("a"): 
    sub = parse_qs(link.get("href")) 

    if "id2" in sub: 
     result.add((sub["id2"][0], sub["dni3"][0])) 

print result 
+0

Andre dies funktioniert auch nicht. ich meinen Code geändert, Fehler bekommen KeyError Traceback (jüngste Aufforderung zuletzt) ​​ in () 14 für Link in soup.find_all ("a "): 15 sub = parse_qs (link.get (" href ")) ---> 16 drucken sub [" id2 "] [0], sub ["dni3"] [0] KeyError: 'id2' – Sandrachuz

+0

Ok. Ich habe den Code geändert und einen Scheck hinzugefügt. Es kann einige href ohne Abfrage geben. –

+0

Ok, lass mich das versuchen – Sandrachuz

0

saubere Art und Weise URLs parsen (Python 3):

from urllib import parse 

URL = "datospersonales.php?nc=PATRICIO GAMARRA MARCELINA&dni1=40772568&dni2=12405868&id1=12a40a58a68&id2=30/06/1980&dni3=40631880" 

query_parts = parse.parse_qs(parse.urlparse(URL).query) 

print(query_parts["id2"][0], query_parts["dni3"][0]) 
+0

Ah, das funktioniert nicht für mich in Python 2.7.14 :( Ich schätze Ihre Hilfe. Eine kurze Frage, die URL ist der 2. Absatz in der o/p. Wie drucken wir nur den 2. Absatz und nicht die anderen? – Sandrachuz

+0

@Sandrachuz 'find_all()' sollte eine reguläre Python-Liste zurückgeben, auf deren Einträge in der üblichen Weise zugegriffen werden kann .. –

+0

Check out https://docs.python.org/2/library/urlparse.html für Python 2 – user2896976

Verwandte Themen