编写一个python脚本,递归遍历页面上的链接

010*_*001 4 python

我正在为我的学校做一个项目,我想比较一下骗局邮件.我找到了这个网站:http://www.419scam.org/emails/ 现在我想做的是将每个骗局保存在单独的文档中,然后我可以分析它们.到目前为止,这是我的代码:

import BeautifulSoup, urllib2

address='http://www.419scam.org/emails/'
html = urllib2.urlopen(address).read()
f = open('test.txt', 'wb')
f.write(html)
f.close()
Run Code Online (Sandbox Code Playgroud)

这样就以文本格式保存了整个html文件,现在我想剥离文件并将html链接的内容保存到诈骗中:

<a href="2011-12/01/index.htm">01</a> 
<a href="2011-12/02/index.htm">02</a> 
<a href="2011-12/03/index.htm">03</a>
Run Code Online (Sandbox Code Playgroud)

等等

如果我得到了,我仍然需要更进一步,打开另一个href.知道如何在一个python代码中做到这一点?

谢谢!

Pau*_*len 5

您在BeautifulSoup中选择了正确的工具.从技术上讲,你可以在一个脚本中完成所有操作,但你可能想要对其进行分割,因为看起来你将要处理成千上万的电子邮件,所有这些都是单独的请求 - 这将需要一个而.

这个页面可以帮到你很多,但这里只是一个小代码片段,可以帮助你入门.这将获取所有html标签,这些标签是电子邮件的索引页面,提取其href链接并在URL的前面添加一些内容,以便可以直接访问它们.

from bs4 import BeautifulSoup
import re
import urllib2
soup = BeautifulSoup(urllib2.urlopen("http://www.419scam.org/emails/"))
tags = soup.find_all(href=re.compile("20......../index\.htm")
links = []
for t in tags:
    links.append("http://www.419scam.org/emails/" + t['href'])
Run Code Online (Sandbox Code Playgroud)

're'是Python的正则表达式模块.在第五行中,我告诉BeautifulSoup找到汤中的所有标签,其href属性与正则表达式匹配.我选择这个正则表达式只获取电子邮件索引页面而不是该页面上的所有href链接.我注意到索引页链接具有所有URL的模式.

拥有所有正确的'a'标记,然后我循环遍历它们,通过执行t ['href']从href属性中提取字符串,并将其余的URL附加到字符串的前面,以获取原始字符串URL.

通过阅读该文档,您应该了解如何扩展这些技术以获取单个电子邮件.