我试图编写一个python脚本来获取特定网页中使用的网址数量:
TypeErrorTraceback (most recent call last)
<ipython-input-7-a3136853c4b2> in <module>()
30 return no_use
31
32 print(mining_webpage())
TypeError: mining_webpage() missing 2 required positional arguments: 'url' and 'list'
这是代码:
from bs4 import BeautifulSoup as bs
import requests
import re
import pandas as pd
import matplotlib as plt
def mining_webpage(url,list):
'''Finds the howmany websites are used in the webpage and counts its total number'''
reallink=[]
tokens=[]
list1=[]
no_use={}
link=url
word_list=list
text=requests.get(link).text
soup=bs(text)
for l in soup.find_all(href=re.compile('https')):
reallink.append(l.get('href').split('//'))
for lists in reallink:
'''print(lists[-1])'''
list1.append(lists[-1].split('.'))
'''print(list1)'''
for l in list1:
tokens.append(l[-2])
for word in tokens:
if word in no_use.keys():
no_use[word]+=1
else:
no_use[word]=1
return no_use
print(mining_webpage())
我知道这可能有一个简单的解决方案,但我真的无法弄清楚我做错了什么,这就是我写给练习的内容。
答案 0 :(得分:0)
在这种情况下,错误消息本身就是不言自明的:
TypeError: mining_webpage() missing 2 required positional arguments: 'url' and 'list'
您已经创建了一个新功能mining_webpage
,需要两个参数url
和list
。这意味着每次调用它时,都需要传递两个参数。例如。
my_list = []
print(mining_webpage('http://stackoverflow.com', my_list))
或者,您可能希望重新定义mining_webpage
以使其占用更少的参数,或者如果使用比预期更少的参数调用函数,则将使用默认值。默认值的示例可能如下所示:
from bs4 import BeautifulSoup as bs
...
import matplotlib as plt
def mining_webpage(url='http://stackoverflow.com', list=None):
'''Finds the howmany websites are used in the webpage and counts its total number'''
reallink=[]
...
当然,如果有&#34;默认&#34;那么以这种方式设置默认值才有意义。您希望经常使用的值。
最后一点,list
实际上用于任何事情并不明显,我真的完全避免调用任何变量list
,因为这是已经在Python标准库(https://docs.python.org/3/library/functions.html#func-list)中定义。第二个参数似乎被用作新变量word_list
的赋值中的值,然后再从不再引用它。