Python web Automation从网页获取电子邮件

时间:2015-09-24 06:43:06

标签: python

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

E.g

  1. 访问某些网站,例如example.com
  2. 搜索电子邮件。
  3. 搜索该链接中的所有页面。
  4. 我在代码

    下面尝试过
    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
    
      

    我把这个网站作为参考。

    有人帮我搞定了吗?

1 个答案:

答案 0 :(得分:2)

因为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将针对每个标记过滤掉&#39; id&#39;属性:

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

如果您传入href的值,则美丽的汤会过滤掉每个标记&#39; s&#39; href&#39;属性:

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
相关问题