2016-11-08 12 views
0

私はウェブからテキストを掻き出すことを学んでいます。アイブ氏は、次の関数引用符を含む引数を渡すPython

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 

私は別のファイルからこれを呼び出していますが...書か

from print1 import get_url 

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

print(ulist[3]) 

問題は、私が使用していCSSセレクタは、私が解析していますサイトに非常にユニークであるということです。だから関数は少し「脆弱」です。私は、関数定義に

def get_url(source_url, css_tag): 

をパラメータを追加し、"h3", { "class" : "entry-title td-module-title" }

を渡すしようとした場合、それは

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

をspazzes関数に引数として

をCSSセレクタを渡したいです

引用符をすべてエスケープしようとしましたが、それでも動作しません。

本当にありがとうございました。私はこれに先験的な答えを見つけることができません。

+0

は、あなたが 'defをGET_URLを定義していますsured(SOURCE_URL、css_tag):'正しくて、それをやった後は、再び変更された機能をインポート?あなたの関数defineの変更が 'get_url()'を呼んでいるファイルに反映されていないように見える –

+0

あなたのエラーは、クォートに関するものではなく、(正確に)1つしかないget_url()引数。 – maze88

+0

あなたが特定したこの問題は正しいと思います。私はそれを追加した後、第二の引数を認識するために私のPythonを再起動する必要がありました。 –

答えて

0

ここで働くバージョンです:

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

これは動作します。私は本当に理由を理解していないが、ありがとう –

+0

@AxleMaxあなたはそれについて何を理解していないのですか?引用符を入れて複数の値を1つにまとめることはできますが、まったく同じようには機能しません。だから私は別々の値を渡しました。 –

関連する問題