2016-07-20 7 views
0

Ich habe den folgenden Code mit dem Zweck, bestimmte Informationen von jeder Seite zu analysieren. Die http von jeder der mehreren Seiten ist strukturiert und daher verwende ich diese Struktur, um alle Links zur weiteren Analyse gleichzeitig zu sammeln.Analysieren bestimmter Werte auf mehreren Seiten

import urllib 
import urlparse 
import re 
from bs4 import BeautifulSoup 

Links = ["http://www.newyorksocialdiary.com/party-pictures?page=" + str(i) for i in range(2,27)] 

Dieser Befehl gibt mir eine Liste von http-Links. Ich gehe weiter, um zu lesen und Suppen zu machen.

Rs = [urllib.urlopen(Link).read() for Link in Links] 
soups = [BeautifulSoup(R) for R in Rs] 

Da diese machen die Suppen, die ich will, ich das letzte Ziel nicht erreichen können - Struktur Parsen <a href= ""> </a>. Zum Beispiel

<a href="/party-pictures/2007/something-for-everyone">Something for Everyone</a> 

bin ich speziell daran interessiert, Dinge wie diese zu erhalten: '/party-pictures/2007/something-for-everyone'. Der folgende Code kann jedoch nicht diesem Zweck dienen.

As = [soup.find_all('a', attr = {"href"}) for soup in soups] 

Kann mir jemand sagen, wo schief gelaufen ist? Ich schätze Ihre Unterstützung sehr. Vielen Dank.

Antwort

1

I am specifically interested in obtaining things like this: '/party-pictures/2007/something-for-everyone'.

The next would be going for regular expression!!

Sie müssen nicht unbedingt reguläre Ausdrücke verwenden, und von dem, was ich verstehe, können Sie das d herausfiltern esired Links mit BeautifulSoup:

[[a["href"] for a in soup.select('a[href*=party-pictures]')] 
for soup in soups] 

Dies würde zum Beispiel die Liste der Links geben, die party-pictures innerhalb des href. *= bedeutet "enthält", select() ist eine CSS-Selektorsuche.

Sie können auch find_all() verwenden und die regular expression filter zum Beispiel gelten:

pattern = re.compile(r"/party-pictures/2007/") 
[[a["href"] for a in soup.find_all('a', href=pattern)] 
for soup in soups] 
+0

Danke. Das sieht so kraftvoll aus und ich bin fasziniert, mehr darüber zu erfahren. Als ich diesen Code ausführte, erhielt ich 'File" graph.py ", Zeile 16, in partys = [[a [" href "] für eine in supp.select ('a [href * = party-piecutre ')] für Suppe in Suppen] Datei "/opt/conda/lib/python2.7/site-packages/bs4/element.py", Zeile 1426, unter select ' Nicht unterstützter oder ungültiger CSS-Selektor: "% s" '% token) ValueError: Nicht unterstützter oder ungültiger CSS-Selektor: "a [href * = party-piecutre" ' – achimneyswallow

+0

@ Hsun-YiHsieh ah, sorry, verpasste das Schließen'] ', jetzt behoben. – alecxe

+0

Vielen Dank. Das hilft sehr viel. :) – achimneyswallow

0

Dies sollte funktionieren:

As = [soup.find_all(href=True) for soup in soups] 

Diese Sie alle href-Tags

geben sollten, wenn Sie nur hrefs mit dem Namen 'a' wollen, dann würde die folgende Arbeit:

As = [soup.find_all('a',href=True) for soup in soups] 
+0

Danke. Der nächste würde für den regulären Ausdruck gehen !! – achimneyswallow

Verwandte Themen