python最简单的爬取邮箱地址_python爬取邮箱的实例代码
1 # -*- coding: cp936 -*-
2 import urllib2
3 import re
4 from pyquery import PyQuery as pq
5 from lxml import etree
6
7 #mailpattern = re.compile('[^\._:>\\-][\w\.-]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+')
8 mailpattern = re.compile('[A-Za-z0-9_]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+')
9
10 htmlcount = 0 #to count the urls
11 maxcount = 3000 # the max count
12 allUrls = set()
13 allMails = set()
14 UrlsQlist = []
15 UrlsQdict = {}
16 url = "http://www.163.com"
17 fmails = open("E:/py/crawler/mailresult.txt","a")
18 furls = open("E:/py/crawler/urlresult.txt","a")
19
20
21
22
23 def geturls(data):#the function to get the urls in the html
24 urls = set()
25 if data:
26 d = pq(data)
27 label_a = d.find('a')#用pyquery库去找到 a 标签.
28 if label_a:
29 label_a_href = d('a').map(lambda i,e:pq(e)('a').attr('href'))
30 for u in label_a_href:
31 if u[0:10]!="javascript" :
32 if u[0:4] == "http":
33 urls.add(u)
34 else:
35 urls.add(url + u)
36 #for u in urls:
37 #print u
38 return urls
39 else:
40 return None
41
42 def gethtml(url):
43 try:
44 fp = urllib2.urlopen(url)
45 except:
46 print "urllib2.urlopen error"
47 return None
48 else:
49 mybytes =fp.read()
50 fp.close()
51 return mybytes
52
53 def savemails(data): # the function to save the emails
54 if data:
55 mailResult = mailpattern.findall(data)
56 mailResultset = set(mailResult)
57 if mailResultset:
58 allMails.update(mailResultset)
59
60 def savehtml(pagecontent,count):
61 if pagecontent != None:
62 f = open("E:/py/crawler/html/"+str(count)+".html","w")
63 f.write(pagecontent)
64 f.close()
65 else:
66 f = open("E:/py/crawler/html/"+str(count)+"error"+".html","w")
67 f.write("this page empty")
68 f.close()
69
70 def BFS(firstUrl):
71 global htmlcount
72 global maxcount
73 allUrls.add(firstUrl)
74 UrlsQlist = list(allUrls)
75 while htmlcount < maxcount : #数量小于最大值
76 tempUrl = UrlsQlist.pop(0)# the queue
77 myWebStr = gethtml(tempUrl)
78 savehtml(myWebStr,htmlcount)
79 savemails(myWebStr)
80 firstUrls_set = geturls(myWebStr)#初始页面的处理
81 if firstUrls_set != None:
82 allUrls.update(firstUrls_set) #记录全部 url
83 for u in firstUrls_set:
84 if u not in UrlsQlist:
85 UrlsQlist.append(u)
86 htmlcount = htmlcount + 1
87
88
89 BFS(url)
90 for u in allMails:
91 try:
92 fmails.write(u)
93 fmails.write('\n')
94 except:
95 continue
96 for u in allUrls:
97 try:
98 furls.write(u)
99 furls.write('\n')
100 except:
101 continue
102 fmails.close()
103 furls.close()
2013.5.13 update
本来想在加个多线程。。。。结果看了 好多资料 无处下手,再研究研究 ,日后再改
加了点 url规范化。代码整理如下:
1 import urllib2
2 import re
3 from pyquery import PyQuery as pq
4 from lxml import etree
5 import urlparse
6 import time
7
8 allUrls = set()
9 allMails = set()
10 urlsDownlist = []
11
12 class mailCrawler:
13 def __init__(self,mailExpression,start_url,maxcount):
14 ''' mailExpressoin 邮箱的正则表达式;
15 start_url开始邮箱;
16 maxcount最大数量'''
17 self.mailpattern = re.compile(mailExpression)
18 self.maxcount = maxcount
19 self.htmlcount = 0
20 self.UrlsQlist = []#url queue 实现广度优先
21 self.url = start_url
22
23
24 def url_normal(self,url):
25 '''url 规范化 '''
26 scheme,netloc,path,query = urlparse.urlsplit(url)[:4]
27 netloc = netloc.lower()
28
29 url.encode("utf-8")
30
31 if path:
32 path = re.sub('/{2,}','/',path)#去除url中的重复/
33 path = re.sub(r'\.$','',path)#去除url中结尾多余的点
34 path = re.sub('/$','',path)#去除url中结尾多余的/
35 path = re.sub('\s','',path)#取出url中的空格
36 if query:
37 return '%s://%s%s?%s' % (scheme,netloc,path or '/',query)
38 else:
39 return '%s://%s%s' % (scheme,netloc,path)
40
41 def geturls(self,data):
42 '''解析html中的url'''
43 urls = set()
44 if data:
45 d = pq(data)
46 label_a = d.find('a')#用pyquery库去找到 a 标签.
47 if label_a:
48 label_a_href = d('a').map(lambda i,e:pq(e)('a').attr('href'))
49 for u in label_a_href:
50 if u[0:10]!="javascript" and u[0:6]!="mailto" :
51 if u[0:4] == "http":
52 normal_url = self.url_normal(u)
53 urls.add(normal_url)
54 else:
55 normal_url = self.url_normal(self.url + u)
56 urls.add(normal_url)
57 return urls
58 else:
59 return None
60
61 def gethtml(self,url):
62 '''下载html 5s超时'''
63 try:
64 fp = urllib2.urlopen(url,None,5)
65 except:
66 print "urllib2.urlopen error or timeout"
67 return None
68 else:
69 mybytes =fp.read()
70 fp.close()
71 return mybytes
72
73 def savemails(self,data):
74 '''将抓取到的url存放到 allmails中 ,set去重复'''
75 global allMails
76 if data:
77 mailResult = self.mailpattern.findall(data)
78 mailResultset = set(mailResult)
79 if mailResultset:
80 allMails.update(mailResultset)
81
82 def savehtml(self,pagecontent,htmlcount,url):
83 '''保存html文件 '''
84 if pagecontent != None:
85 f = open("E:/py/crawler/html/"+str(htmlcount)+".html","w")
86 f.write(pagecontent)
87 f.close()
88 else:
89 f = open("E:/py/crawler/html/"+str(htmlcount)+"error"+".html","w")
90 try:
91 f.write(url)
92 except:
93 f.write("encode error")
94 f.close()
95
96 def BFS(self):
97 '''用队列实现广度优先,爬取url '''
98 global allUrls
99 global urlsDownlist
100 allUrls.add(self.url)
101 self.UrlsQlist = list(allUrls)
102 while self.htmlcount < self.maxcount : #数量小于最大值
103 tempUrl = self.UrlsQlist.pop(0)# the queue
104 print tempUrl
105 urlsDownlist.append(tempUrl)
106 myWebStr = self.gethtml(tempUrl)
107 self.savehtml(myWebStr,self.htmlcount,tempUrl)
108 self.savemails(myWebStr)
109 firstUrls_set = self.geturls(myWebStr)#初始页面的处理
110 if firstUrls_set != None:
111 for u in firstUrls_set:
112 if u not in allUrls:
113 allUrls.add(u)
114 self.UrlsQlist.append(u)
115 self.htmlcount = self.htmlcount + 1
116
117
118 def main():
119 reg = r'[A-Za-z0-9_]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+'
120 url = "http://www.baidu.com"
121 count = 100
122 fmails = open("E:/py/crawler/mailresult.txt","a")
123 furls = open("E:/py/crawler/urlresult.txt","a")
124 fdownUrls = open("E:/py/crawler/urlDownresult.txt","a")
125 newcrawler = mailCrawler(reg,url,count)
126 newcrawler.BFS()
127 for u in allMails:
128 try:
129 fmails.write(u)
130 fmails.write('\n')
131 except:
132 continue
133 for u in allUrls:
134 try:
135 furls.write(u)
136 furls.write('\n')
137 except:
138 continue
139 for u in urlsDownlist:
140 try:
141 fdownUrls.write(u)
142 fdownUrls.write('\n')
143 except:
144 continue
145 fmails.close()
146 furls.close()
147 fdownUrls.close()
148
149 if __name__ == '__main__':
150 main()
分享到:
2013-05-18 03:59
浏览 4513
评论
python最简单的爬取邮箱地址_python爬取邮箱的实例代码相关推荐
- python爬取地图地址_python爬取了高德地图一些地点的数据,爬出来数据大致情况如下:...
python爬取了高德地图一些地点的数据,爬出来数据大致情况如下: 下面是基本流程: 1.注册成为高德地图API开发者,网址http://lbs.amap.com/(主要是获取自己的keywords ...
- python爬取地图地址_Python爬取百度地图poi数据 !
锵锵锵,我来啦.10天过的好快呀,4月份都已经过了三分之一,我的体重还居高不下,qwq.今天给大家分享python爬取百度地图小区的数据,希望大家看后,可以尝试自己编写爬取自己所在市的中学,公园,银行 ...
- python最简单的爬取邮箱地址_python3爬取网页中的邮箱地址
1.爬虫分析 分析结果对: http://xxx.com?method=getrequest&gesnum=00000001 http://xxx.com?method=getrequest& ...
- python爬虫小说下载到txt文档_python 爬取网络小说 清洗 并下载至txt文件
什么是爬虫 网络爬虫,也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人.其目的一般为编纂网络索引. 网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引.网络爬虫可以 ...
- python爬取手机微信_Python爬取微信好友
前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 itchat安装 对微信的控制可以使用itchat来实现,我们找到itc ...
- python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?
开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...
- python爬取酒店信息_Python 爬取美團酒店信息
事由:近期和朋友聊天,聊到黃山酒店事情,需要了解一下黃山的酒店情況,然后就想着用python 爬一些數據出來,做個參考 主要思路:通過查找,基本思路清晰,目標明確,僅僅爬取美團莫一地區的酒店信息,不過 ...
- python爬取学校新闻_Python抓取学院新闻报告
们发现,我们能够直接在新闻详情页面抓取到我们需要的数据:标题,时间,内容.URL. 好,到现在我们清楚抓取一篇新闻的思路了.但是,如何抓取所有的新闻内容呢? 这显然难不到我们. 我们在新闻栏目的最下方 ...
- python爬取动态网页_python爬取动态网页数据,详解
原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...
最新文章
- linux挂载移动硬盘 格式化_linux系统下如何挂载NTFS移动硬盘
- 4104 oracle 数据文件名,Oracle 11g 常遇到ora-01034错误,这是为什么?
- 开发日记-20190527 关键词 ubuntu无线网卡驱动安装
- Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用
- An In-Depth Look at the HBase Architecture--转载
- 地图API引发的设想
- Objective C 基础教程
- 防火墙对nginx服务器有影响
- 【今日CV 视觉论文速览】27 Nov 2018
- iOS AVPlayer视频播放器
- python装饰器快速入门
- 摩斯电码php源码,PHP实现基于文本的莫斯电码生成器
- qt android编程,Qt for Android开发实例教程
- Laya Shader3D之边缘光照
- vue table表格中身份证隐藏中间几位
- js与朴php订单评价功能
- 七、最短路径——弗洛伊德(Floyd)算法
- 前端开发:使用JS正则表达式校验邮箱和手机号的方法,安卓面试题最新2020
- APOllO服务器性能,HPE Apollo 4200 Gen9 服务器
- Git上传文件不能超过100M的解决办法
热门文章
- 关于C++中公有继承、私有继承、保护继承的讨论
- hdu5514Frogs
- win10无线投屏_miracast投屏的未来
- 区块链白皮书阅读笔记
- keep-alive上加v-if导致缓存失效
- android.view.WindowLeaked解决办法
- 用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则
- AOJ-proble-807
- 设备在升级界面文字或图像方向偏转问题修改方案(RK3399方案)
- 【已解决】模拟人生4(Sims4) 启动失败 orangeEmu.dll及应用程序错误0x0000142