2016-11-08 79 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): 

的CSS选择器作为参数传递给函数

,并试图通过"h3", { "class" : "entry-title td-module-title" }

它spazzes出

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

我试图转义所有引号,但它仍然无法正常工作。

我真的很感谢一些帮助。我无法找到这个先前的答案。

+0

你sured你定义'高清GET_URL(SOURCE_URL,css_tag):'正确,这样做,再次导入更改的功能之后?看起来你的函数定义变化没有反映在你调用'get_url()'的文件中' –

+0

你的错误不是关于引号,而是关于'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你不了解它吗?你似乎认为你可以通过引用多个引号将多个值合并成一个值,但它根本就不行。所以我只通过了不同的值。 –