使用python中的web爬虫创建垃圾邮件列表
嘿,伙计们,我不想做任何恶意的事情,我只需要做一些家庭作业。我是一个相当新的程序员,我使用的是Python3.0,我很难使用递归来解决问题。我在这个问题上纠缠了好一阵子。这是我的建议 任务:使用python中的web爬虫创建垃圾邮件列表,python,Python,嘿,伙计们,我不想做任何恶意的事情,我只需要做一些家庭作业。我是一个相当新的程序员,我使用的是Python3.0,我很难使用递归来解决问题。我在这个问题上纠缠了好一阵子。这是我的建议 任务: 编写一个递归方法spam(url,n),该方法将网页的url作为输入和非负整数n,收集网页中包含的所有电子邮件地址并将其添加到全局字典变量spam_dict中,然后递归调用网页中包含的每个http链接 您将使用字典,因此每个电子邮件地址只保存一份副本;您的字典将存储(键、值)对(电子邮件、电子邮件)。递归
def links2(url):
content = str(urlopen(url).read())
myparser = MyHTMLParser()
myparser.feed(content)
lst = myparser.get()
mergelst = []
for link in lst:
mergelst.append(urljoin(lst[0],link))
print(mergelst)
任何输入(除了为什么垃圾邮件是坏的)将不胜感激。此外,我意识到上述功能可能看起来更好,如果你有办法做到这一点,我洗耳恭听。然而,我所需要的只是让程序产生正确的输出
补充:
我写了一个从页面收集电子邮件的功能,但我不知道如何将.com和.edu以及.org合并在一起
from re import findall
def emails(url):
links = str(links3(url))
# how do I construct pattern?
pattern='[A-Za-z0-9_.]+\@[A-Za-z0-9_.]+.com\.edu\.org
lst = findall(pattern,links)
print(lst)
我该怎么告诉python呢?我在文档中找不到它。想想递归是如何工作的。您希望函数在某些情况下能够调用自身。在这种情况下,您需要向函数中添加递归级别的参数,然后您需要弄清楚它在各种情况下应该做什么 在最基本的层面上,n=0时它应该做什么?(提示:你已经知道了) 如果n=1,它应该怎么做?您可能希望在n=0的情况下对现有列表中的每个元素再次调用函数
如果n大于1呢?到目前为止,您希望在每个元素上使用n=n-1再次调用函数。想想递归是如何工作的。您希望函数在某些情况下能够调用自身。在这种情况下,您需要向函数中添加递归级别的参数,然后您需要弄清楚它在各种情况下应该做什么 在最基本的层面上,n=0时它应该做什么?(提示:你已经知道了) 如果n=1,它应该怎么做?您可能希望在n=0的情况下对现有列表中的每个元素再次调用函数
如果n大于1呢?到目前为止,您希望在每个元素上使用n=n-1再次调用您的函数。
n
将递归限制为最大“调用深度”,正如问题所述,它将发挥作用
其思想是,由于您递归地调用已运行扫描中的电子邮件扫描,因此您建立了一个调用堆栈,其中包含所调用的内容,当您继续递归地调用扫描仪时,这些内容会越来越深
你不希望它永远持续下去,所以作为一个参数,你传递一个整数,每次你打电话时,这个整数都会递减。当它达到0时,您将停止执行递归调用,并让递归序列自行展开
call 1 (args...., n=3)
call 2a (args...., n=2)
call 3 (args...., n=1)
call 4a (args..., n=0) <-- these calls won't call more scans
call 4b (args..., n=0) <-- because n=0, so this is max depth
call 2b (args...., n=2)
调用1(参数….,n=3)
呼叫2a(args…,n=2)
呼叫3(args…,n=1)
调用4a(args…,n=0)n
将通过将递归限制在最大“调用深度”来发挥作用,正如问题所述
其思想是,由于您递归地调用已运行扫描中的电子邮件扫描,因此您建立了一个调用堆栈,其中包含所调用的内容,当您继续递归地调用扫描仪时,这些内容会越来越深
你不希望它永远持续下去,所以作为一个参数,你传递一个整数,每次你打电话时,这个整数都会递减。当它达到0时,您将停止执行递归调用,并让递归序列自行展开
call 1 (args...., n=3)
call 2a (args...., n=2)
call 3 (args...., n=1)
call 4a (args..., n=0) <-- these calls won't call more scans
call 4b (args..., n=0) <-- because n=0, so this is max depth
call 2b (args...., n=2)
调用1(参数….,n=3)
呼叫2a(args…,n=2)
呼叫3(args…,n=1)
呼叫4a(args…,n=0)快速问题。。。我写了一个从页面收集电子邮件的功能,但我不知道如何将.com和.edu以及.org合并在一起。从重新导入findall def电子邮件(url):links=str(links3(url))模式='[A-Za-z0-9.]+\@[A-Za-z0-9.]+.com\.edu\.org;如何正确执行上述操作?lst=findall(pattern,links)print(lst)如何告诉python?我在文档中找不到它。简单的regexp替换与…@[\w\.]+\(com|edu|org)
一样简单。此外,最好添加到原始问题中,而不是尝试将其塞进这个小框中。我这样做是为了你(见上面的“补充:”快速提问。。。我写了一个从页面收集电子邮件的功能,但我不知道如何将.com和.edu以及.org合并在一起。从重新导入findall def电子邮件(url):links=str(links3(url))模式='[A-Za-z0-9.]+\@[A-Za-z0-9.]+.com\.edu\.org;如何正确执行上述操作?lst=findall(pattern,links)print(lst)如何告诉python?我在文档中找不到它