2016-11-08 9 views
0

Ich lerne Text aus dem Internet zu kratzen. Ive geschrieben, um die folgende FunktionPython übergeben Argument mit Zitat

from bs4 import BeautifulSoup 
import requests 

def get_url(source_url): 
    r = requests.get(source_url) 
    data = r.text 
    #extract HTML for parsing 
    soup = BeautifulSoup(data, 'html.parser') 
    #get H3 tags with class ... 
    h3list = soup.findAll("h3", { "class" : "entry-title td-module-title" }) 
    #create data structure to store links in 
    ulist = [] 
    #pull links from each article heading 
    for href in h3list: 
     ulist.append(href.a['href']) 
    return ulist 

ich dies aus einer separaten Datei nenne ...

from print1 import get_url 

ulist = get_url("http://www.startupsmart.com.au/") 

print(ulist[3]) 

Das Problem ist, dass die CSS-Selektor ich verwende ist ziemlich einzigartig auf der Seite, die ich Parsen bin. Die Funktion ist also etwas "spröde". Ich möchte den CSS-Selektor als Argument an die Funktion

passieren Wenn ich einen Parameter der Funktionsdefinition hinzufügen

def get_url(source_url, css_tag): 

und versuchen "h3", { "class" : "entry-title td-module-title" }

passieren es spazzes aus

TypeError: get_url() takes exactly 1 argument (2 given)

Ich habe versucht, alle Zitate zu entkommen, aber es funktioniert immer noch nicht.

Ich würde wirklich etwas Hilfe zu schätzen wissen. Ich kann keine vorherige Antwort auf diese Frage finden.

+0

Sind Sie leistet Ihnen definierten 'def GET_URL (SOURCE_URL, css_tag):' richtig und danach wieder importiert die geänderte Funktion tun? Es sieht so aus, als ob Ihre Funktion defination nicht in der Datei reflektiert wird, in der Sie 'get_url()' –

+0

aufrufen. Ihr Fehler betrifft nicht die Anführungszeichen, sondern die Funktion 'get_url()', die, wie gesagt, nur (genau) eins braucht Streit. – maze88

+0

Ich denke, dieses Problem, das Sie identifiziert haben, ist korrekt. Ich musste meinen Python neu starten, um das zweite Argument zu erkennen, nachdem ich es hinzugefügt hatte. –

Antwort

0

Hier ist eine Version, die funktioniert:

from bs4 import BeautifulSoup 
import requests 

def get_url(source_url, tag_name, attrs): 
    r = requests.get(source_url) 
    data = r.text 
    # extract HTML for parsing 
    soup = BeautifulSoup(data, 'html.parser') 
    # get H3 tags with class ... 
    h3list = soup.findAll(tag_name, attrs) 
    # create data structure to store links in 
    ulist = [] 
    # pull links from each article heading 
    for href in h3list: 
     ulist.append(href.a['href']) 
    return ulist 

ulist = get_url("http://www.startupsmart.com.au/", "h3", {"class": "entry-title td-module-title"}) 

print(ulist[3]) 
+0

Das funktioniert. Ich verstehe nicht wirklich warum aber danke –

+0

@AxleMax was verstehst du nicht darüber? Sie scheinen zu denken, dass Sie mehrere Werte zu einem kombinieren können, indem Sie Anführungszeichen verwenden, aber so funktioniert es überhaupt nicht. Also habe ich einfach getrennte Werte übergeben. –

Verwandte Themen