Tao's Blog

python爬虫实战: 爬取贴吧帖子中的邮箱

这几天在学习python爬虫,就写了一个爬百度贴吧里别人的邮箱。由于是新手刚刚才上步,程序设计得不是那么健全,不过确实能取到自己想要的东西。第一次写原创博客,就用代码说话吧!嘘…
随便找一个自己喜欢的帖子,我选择的是这篇百度贴吧帖子链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!usr/bin/env python
# encoding:utf-8
import urllib2
import re
from bs4 import BeautifulSoup
import sys
import time
# 解决中文字符不能正确显示的问题
reload(sys)
sys.setdefaultencoding('utf-8')
# =======================获取该链接的总页数====================================
def get_max_page(url):
request = urllib2.urlopen(url)
html_content = request.read()
request.close()
soup_max_page = BeautifulSoup(html_content, "lxml")
a_max_page = soup_max_page.find('a', text=re.compile(u"尾页"))
str_link = str(a_max_page).split("=")[-1]
page = str_link.split("\"")[0]
max_page = int(page)
return max_page
def get_content(url_html, max_page, regex):
count = 1 # 定义一个计数
# 将正则表达式编译为一个pattern实例
regex_pattern = re.compile(regex, re.IGNORECASE)
# ========================遍历每页页面=========================================
for index in xrange(1, max_page+1):
email_count = 0
url_page = url_html + str(index)
request_page = urllib2.urlopen(url_page)
html_content_page = request_page.read()
request_page.close()
soup = BeautifulSoup(html_content_page, "lxml")
cc_table = soup.find_all(text=regex_pattern)
for email in cc_table:
email_out = regex_pattern.search(email).group()
file_email.write(str(count)+" : "+email_out+"\n")
email_count += 1
count += 1
print u"========已完成第%d页的提取========" % (index)
print u"该页共搜集%d个邮箱\n" % (email_count)
print u"该链接共获取到 %d 个邮箱\n" % (count-1)
if __name__ == '__main__':
# 程序开始时间
start_time = time.time()
# 在文件中以追加的方式写入数据
file_email = open("data.txt", "w")
# 定义email的正则表达式
regex = r"\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b"
# 定义链接的首页,便于获取总页数
url = "http://tieba.baidu.com/p/950187586"
max_page = get_max_page(url)
# 取得总页数的时间
mid_time = time.time()
print u"\n========取得页数成功,该帖子共有:%d 页========\n" % (max_page)
print u"用时:%f s\n" % (mid_time-start_time)
# 定义需要爬的链接
url_html = "http://tieba.baidu.com/p/950187586?pn="
get_content(url_html, max_page, regex)
file_email.close()
# 程序结束的时间
end_time = time.time()
# 打印出程序运行时间
print u"\n========程序已完成========"
print u"用时:: %f s" % (end_time-start_time)

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
========取得页数成功,该帖子共有:102 页========
用时:1.166000 s
========已完成第1页的提取========
该页共搜集18个邮箱
========已完成第2页的提取========
该页共搜集21个邮箱
========已完成第3页的提取========
该页共搜集24个邮箱
...
...
...
========已完成第99页的提取========
该页共搜集28个邮箱
========已完成第100页的提取========
该页共搜集26个邮箱
========已完成第101页的提取========
该页共搜集23个邮箱
========已完成第102页的提取========
该页共搜集19个邮箱
该链接共获取到 2759 个邮箱
========程序已完成========
用时:: 130.370000 s

这是博主第一个python爬虫的小程序, 后续会一直更新

本文链接: http://taolichuan.com/2016/11/19/python爬虫实战-爬取贴吧帖子中的邮箱/  转载请注明转载自: 陶之夭夭