我正在为我的学校做一个项目,我想在这个项目中比较诈骗邮件。我找到了这个网站: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()这将以文本格式保存整个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>等。
如果我做到了这一点,我仍然需要更进一步,打开另一个保存href。你知道我如何在一段python代码中做到这一点吗?
谢谢!
发布于 2012-06-05 02:40:23
您在BeautifulSoup中选择了正确的工具。从技术上讲,您可以在一个脚本中完成所有这些操作,但您可能希望对其进行分段,因为看起来您将处理数以万计的电子邮件,所有这些邮件都是独立的请求-而这将需要一段时间。
This page会给你很大的帮助,但这里只有一小段代码来帮助你入门。这将获取作为电子邮件索引页的所有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'])'re‘是Python的正则表达式模块。在第五行中,我告诉BeautifulSoup在soup中查找href属性与正则表达式匹配的所有标记。我选择这个正则表达式只获取电子邮件索引页面,而不是该页面上的所有href链接。我注意到,索引页面链接的所有URL都具有这种模式。
有了所有合适的'a‘标记,然后循环遍历它们,通过执行t' href’从href属性中提取字符串,并将URL的其余部分附加到字符串的前面,以获得原始字符串URL。
通读该文档,您应该会了解如何扩展这些技术以获取单独的电子邮件。
发布于 2012-06-05 02:35:57
您还可以在requests和lxml.html中找到价值。请求是发出http请求的另一种方式,而lxml是解析xml和html内容的另一种选择。
有许多方法可以搜索html文档,但您可能希望从cssselect开始。
import requests
from lxml.html import fromstring
url = 'http://www.419scam.org/emails/'
doc = fromstring(requests.get(url).content)
atags = doc.cssselect('a')
# using .get('href', '') syntax because not all a tags will have an href
hrefs = (a.attrib.get('href', '') for a in atags)或者按照使用.iterlinks()的注释中的建议。注意,如果你只想要'a‘标签,你仍然需要过滤。无论哪种方式,.make_links_absolute()调用都可能会有所帮助。不过,这是你的作业,所以你可以玩玩它。
doc.make_links_absolute(base_url=url)
hrefs = (l[2] for l in doc.iterlinks() if l[0].tag == 'a')下一个给你的是...如何循环和打开所有单独的垃圾链接。
发布于 2012-06-05 02:08:56
要获取页面上的所有链接,您可以使用BeautifulSoup。看看this page吧,它可以提供帮助。它实际上告诉你如何准确地做你需要的事情。
要保存所有页面,您可以执行与在当前代码中相同的操作,但在一个循环中,该循环将遍历您提取并存储在列表中的所有链接。
https://stackoverflow.com/questions/10885708
复制相似问题