我想要一个python脚本,它打开一个链接并打印该页面的电子邮件地址。
E.g
我在代码
下面尝试过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
我把这个网站作为参考。
有人帮我搞定了吗?
答案 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