邮件爬取,Python脚本

阅读: 评论:0

邮件爬取,Python脚本

邮件爬取,Python脚本

1.邮件爬取原理

(1)邮件爬取收集工具:常见的搜索引擎,例如百度、Bing等

(2)邮件爬取原理:在指定网页上对邮件的关键字进行搜索,对搜索到的邮件相关信息进行爬取,处理

(3)邮件爬取作用:在得到邮件相关信息后,可以进行邮件钓鱼,通过邮件钓鱼来达到渗透的目的。

2,邮件爬取脚本

(1)输入相关库函数

import sys
import getopt
import requests
from bs4 import BeautifulSoup
import re

(2) 利用pt()函数来处理命令行参数,这个函数有两种格式,一种为短选项,即“-"加上单个字母选项,另外一种为长选项,即“--”加一个单词选项。 

def start(argv):url = ""pages = ""if len(sys.argv) < 2:print("-h 帮助信息;n")it()try:banner()opts,args = pt(argv,"-u:-p:-h")  #这个函数是为了从外部输入不同的命令行选项时,对应执行不同的功能,函数返回两个列表:opts 和argexcept getopt.GetoptError:print('Error an argument!')it()for opt, arg in opts:  #opts 是一个两元组的列表。每个元素为:( 选项串, 附加参数),输出opts列表数值并赋值给自定义的变量。if opt == "-u":url = argelif opt == "-p":pages = argelif opt =="-h":print(usage())launcher(url, pages)  #后面自己编写的函数

(3)帮助信息,其实就是说明使用规则,使得输出结果显得简洁美观,编辑显示方式、前景色、背景色。输入格式:python xx.py -u 域名 -p 页数

#开头: 33[显示方式;前景色;背景色m
#结尾: 33[0m
def banner():    #输出帮助信息print('33[1:34m ################################ 33[0mn''33[1:34m 米多奇勇士 33[0mn''33[1:34m ################################ 33[0mn')def usage():       #使用规则。print('-h: --help 帮助;')print('-u: --url 域名;')print('-p: --pages 页数;')print('eg: python -u "www.baidu" -p 100'+'n')it()         #可以通过捕捉SystemExit异常,在finally语句中进行一些清理操作;不捕捉SystemExit异常将直接退出程序。

(4) 编写通过正则表达式获取邮箱号码的代码

def search_email(html):emails = re.findall(r"[a-z0-9.-+_]+@[a-z0-9.-+_]+.[a-z]+",html,re.I) 
#用包含方式匹配,把所有匹配到的字符放到以列表中的元素返回多个匹配值return emailsdef headers(referer):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko20100101 Firefox/60.0','Accept':'*/*','Accept-Language': 'en-US,en:q=0.5','Accept-Encoding': 'gzip,deflate','Referer': referer}return headers

(5)编写bing_search()函数和baidu_search()函数来对bing搜索引擎和百度进行爬取

def bing_search(url, page, key_word):referer = "=email+site%3abaidu&qs=n&sp=-1&pq=emailsite%3abaidu&first=1&FORM=PERE1"     #referer作用是指示一个请求是从哪里链接过来conn = requests.session()       #session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookiesbing_url = "=" + key_word + "site%3a" + url + "&qs=n&sp=-1&pq=" +key_word+"site%3a"+ url +"&first=" + str((page-1)*10) +"&FORM=PERE1&#('', headers=headers(referer))r = (bing_url, stream=True, headers=headers(referer), timeout=8)emails = search_)return emailsdef baidu_search(url, page, key_word):email_list = []emails = []referer = "=email+site%3Abaidu&pn=1"baidu_url = "="+key_word+"+site%3A"+url +"&pn="+str((page-1)*10)conn = requests.session()(referer, headers=headers(referer))r = (baidu_url, headers=headers(referer))soup = , 'lxml')     #用来解析HTML和XML文档,lxml的优点速度很快,兼容性好tagh3 = soup.find_all('h3')     #寻找h3标签for h3 in tagh3:href = h3.find('a').get('href')  #获取 a 标签下 href 的属性值try:r = (href, headers=headers(referer), timeout=8)emails = search_)except Exception as e:passfor email in emails:email_list.append(email)  #append在列表末尾添加新的对象return email_list

 (6)通过调用百度和Bing搜索引擎的爬取函数【bing_search()和baidu_search()】,得到爬取结果,进行合并 ,去重之后再输出。

def launcher(url,pages):     #漏洞调回函数,定义关键字,在bing和百度中搜索,将查询结果去重输出,email_num = []key_words = ['email', 'mail', 'mailbox', '邮件', '邮箱', 'postbox']for page in range(1, int(pages)+1):for key_word in key_words:bing_emails = bing_search(url, page, key_word)   #编写的bing函数baidu_emails = baidu_search(url, page, key_word)  #编写的百度函数sum_emails = bing_emails + baidu_emailsfor email in sum_emails:      if email in email_num:passelse:print(email)with open(&#', 'a+') as f:f.write(email + 'n')email_num.append(email)

(7) 结合起来就是一个完整的python邮件爬取脚本了

import sys
import getopt
import requests
from bs4 import BeautifulSoup
import redef start(argv):url = ""pages = ""if len(sys.argv) < 2:print("-h 帮助信息;n")it()try:banner()opts,args = pt(argv,"-u:-p:-h")  #这个函数是为了从外部输入不同的命令行选项时,对应执行不同的功能,函数返回两个列表:opts 和argexcept getopt.GetoptError:print('Error an argument!')it()for opt, arg in opts:  #opts 是一个两元组的列表。每个元素为:( 选项串, 附加参数),输出opts列表数值并赋值给自定义的变量。if opt == "-u":url = argelif opt == "-p":pages = argelif opt =="-h":print(usage())launcher(url, pages)  #后面自己编写到的函数#开头: 33[显示方式;前景色;背景色m
#结尾: 33[0m
def banner():    #输出帮助信息print('33[1:34m ################################ 33[0mn''33[1:34m 米多奇勇士 33[0mn''33[1:34m ################################ 33[0mn')def usage():       #使用规则。print('-h: --help 帮助;')print('-u: --url 域名;')print('-p: --pages 页数;')print('eg: python -u "www.baidu" -p 100'+'n')it()         #可以通过捕捉SystemExit异常,在finally语句中进行一些清理操作;不捕捉SystemExit异常将直接退出程序。def launcher(url,pages):     #漏洞调回函数,定义关键字,在bing和百度中搜索,将查询结果去重输出,email_num = []key_words = ['email', 'mail', 'mailbox', '邮件', '邮箱', 'postbox']for page in range(1, int(pages)+1):for key_word in key_words:bing_emails = bing_search(url, page, key_word)   #编写的bing函数baidu_emails = baidu_search(url, page, key_word)  #编写的百度函数sum_emails = bing_emails + baidu_emailsfor email in sum_emails:if email in email_num:passelse:print(email)with open(&#', 'a+') as f:f.write(email + 'n')email_num.append(email)def bing_search(url, page, key_word):referer = "=email+site%3abaidu&qs=n&sp=-1&pq=emailsite%3abaidu&first=1&FORM=PERE1"#referer作用是指示一个请求是从哪里链接过来conn = requests.session()#session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookiesbing_url = "=" + key_word + "site%3a" + url + "&qs=n&sp=-1&pq=" +key_word+"site%3a"+ url +"&first=" + str((page-1)*10) +"&FORM=PERE1&#('', headers=headers(referer))r = (bing_url, stream=True, headers=headers(referer), timeout=8)emails = search_)return emailsdef baidu_search(url, page, key_word):email_list = []emails = []referer = "=email+site%3Abaidu&pn=1"baidu_url = "="+key_word+"+site%3A"+url +"&pn="+str((page-1)*10)conn = requests.session()(referer, headers=headers(referer))r = (baidu_url, headers=headers(referer))soup = , 'lxml')     #用来解析HTML和XML文档,lxml的优点速度很快,兼容性好tagh3 = soup.find_all('h3')     #寻找h3标签for h3 in tagh3:href = h3.find('a').get('href')  #获取 a 标签下 href 的属性值try:r = (href, headers=headers(referer), timeout=8)emails = search_)except Exception as e:passfor email in emails:email_list.append(email)  #append在列表末尾添加新的对象return email_listdef search_email(html):emails = re.findall(r"[a-z0-9.-+_]+@[a-z0-9.-+_]+.[a-z]+",html,re.I) #用包含方式匹配,把所有匹配到的字符放到以列表中的元素返回多个匹配值return emailsdef headers(referer):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko20100101 Firefox/60.0','Accept':'*/*','Accept-Language': 'en-US,en:q=0.5','Accept-Encoding': 'gzip,deflate','Referer': referer}return headersif __name__ == '__main__':# 定义异常try:start(sys.argv[1: ])except KeyboardInterrupt:print("interrupted by user, killing all threads ... ")

结果: 

 3.书籍推荐

如果给位小伙伴对python安全攻防感兴趣,强烈推荐这本书,本人就是根据这本书进行学习的。

 

以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;非常期待你的点赞和分享哟,谢谢!

 

                                                                                             

 

本文发布于:2024-02-01 15:18:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170677190637537.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:脚本   邮件   Python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23