【问题标题】:Python web Automation to get Email from WebpagePython web 自动化从网页获取电子邮件
【发布时间】:2015-09-24 06:43:06
【问题描述】:

我想要一个可以打开链接并从该页面打印电子邮件地址的 python 脚本。

例如

  1. 访问 example.com 等网站
  2. 在其中搜索电子邮件。
  3. 在该链接的所有页面中搜索。

我在下面的代码中试过

import requests
from bs4 import BeautifulSoup

r = requests.get('http://www.digitalseo.in/')
data = r.text
soup = BeautifulSoup(data)

for rate in soup.find_all('@'):
    print rate.text

我把这个网站作为参考。

有人帮我弄这个吗?

【问题讨论】:

  • 你试过了吗?您可以使用beautifulsoup 和requests 来做到这一点。
  • 是的。我试过 BeautifulSoup。但我无法得到。
  • 你的代码是什么?错误信息是什么?输出是什么?
  • 从 bs4 导入请求 import BeautifulSoup r = requests.get('digitalseo.in/') data = r.text soup = BeautifulSoup(data) for rate in soup.find_all('@'): print rate .text 我没有得到任何输出。我拿那个网站仅供参考。
  • 好的,因为find_all() 函数将搜索标签,而不是电子邮件地址。我会发布一个答案来解释这一点。我认为你应该编辑你的问题并添加你的代码。

标签: python


【解决方案1】:

因为find_all() 只会搜索标签。来自文档:

签名:find_all(name, attrs, recursive, string, limit, **kwargs)

find_all() 方法查看标签的后代并检索与您的过滤器匹配的所有后代。

所以你需要像这样添加一个关键字参数:


import re
import requests
from bs4 import BeautifulSoup

r = requests.get('http://www.digitalseo.in/')
data = r.text
soup = BeautifulSoup(data, "html.parser")

for i in soup.find_all(href=re.compile("mailto")):
    print i.string

演示:

contact@digitalseo.in
contact@digitalseo.in


来自文档:

任何未被识别的参数都将被转换为标签属性之一的过滤器。如果你为一个名为 id 的参数传入一个值,Beautiful Soup 将过滤每个标签的 'id' 属性:

soup.find_all(id='link2')
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

如果您传入href 的值,Beautiful Soup 将过滤每个标签的“href”属性:

soup.find_all(href=re.compile("elsie"))
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

您可以查看文档了解更多信息:http://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all


如果您想从文档中查找电子邮件地址,regex 是一个不错的选择。

例如:

import re
re.findall( '[^@]+@[^@]+\.[^@]+ ', text) # remember change `text` variable

如果您想通过关键字在页面中找到链接,只需使用.get,如下所示:

import re
import requests
from bs4 import BeautifulSoup

def get_link_by_keyword(keyword):
    links = set()
    for i in soup.find_all(href=re.compile(r"[http|/].*"+str(keyword))):
        links.add(i.get('href'))

    for i in links:
        if i[0] == 'h':
            yield i
        elif i[0] == '/':
            yield link+i
        else:
            pass

global link
link = raw_input('Please enter a link: ')
if link[-1] == '/':
    link = link[:-1]

r = requests.get(link, verify=True)
data = r.text
soup = BeautifulSoup(data, "html.parser")

for i in get_link_by_keyword(raw_input('Enter a keyword: ')):
    print i

【讨论】:

  • 它工作正常。是否可以根据@符号找到邮件。
  • 不,这将搜索href=mailto。如果您检查 HTML,那么您会看到类似 &lt;a href="mailto:contact@digitalseo.in"&gt; 的内容。
  • 有什么方法可以根据@符号查找E-mail。因为在某些情况下会列出不带
  • 是的,如果您想在文档或某个字符串中搜索电子邮件地址,请使用正则表达式代替 BeautifulSoup。让我编辑我的答案并添加它。
  • 好的,先生。谢谢你。这很有帮助。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多