最近,老师给了一个练习是,实现一个爬虫,就爬大概100个网页,匹配出邮箱。

于是,我花了几天时间,熟悉熟悉了python,就有了下面这个超级简单的爬虫程序。各种毛病。。。。。。

这里先说明一下,python库的安装,因为我在这上面浪费了不少时间。

首先是pip和distribute。这两个是用来管理和安装python库的。具体请看这里http://jiayanjujyj.iteye.com/blog/1409819

在windows下,在命令行中python distribute_setup.py (在distribute_setup.py这个文件目录下)。然后就可以用easy_install 命令来装其他模块了。

pyquery有一个依赖库,是lxml。这个模块要用到本机c语言的编译器,如果本机装有VS或者mingw相关的东西,容易遇到各种装不上的问题。理论上来说是,只要正确配置,就会利用本机的编译器将lxml模块装好。但是,我是各种郁闷装不上。。于是找到了这里http://www.lfd.uci.edu/~gohlke/pythonlibs/。

在那个网站里面,找到对应的版本,装上就ok了。

1 importurllib22 importre3 from pyquery importPyQuery as pq4 from lxml importetree5 importsys6 importcopy7 ##reload(sys)

8 ##sys.setdefaultencoding("utf8")

9

10

11 mailpattern = re.compile('[^\._:>\\-][\w\.-]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+')12 #mailpattern = re.compile('[A-Za-z0-9]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+')

13

14 url = "http://www.xxx.cn"

15 firstUrls = []#to store the urls

16 secondUrls =[]17 count = 1 #to count levels

18 furls = open("E:/py/crawler/urlsRecord.txt","a")19 fmail = open("E:/py/crawler/mailresult.txt","a")20

21

22

23 def geturls(data): #the function to get the urls in the html

24 urls =[]25 d =pq(data)26 label_a = d.find('a')#用pyquery库去找到 a 标签.

27 iflabel_a:28 label_a_href = d('a').map(lambda i, e:pq(e)('a').attr('href'))29 for u inlabel_a_href:30 if u[0:10]!="javascript":31 if u[0:4] == "http":32 urls.append(u)33 else:34 urls.append(url +u)35 for u inurls:36 furls.write(u)37 furls.write('\n')38 returnurls39

40

41 def savemails(data): #the function to save the emails

42 mailResult =mailpattern.findall(data)43 ifmailResult:44 for u inmailResult:45 printu46 fmail.write(u)47 fmail.write('\n')48

49 defgethtml(url):50 fp =urllib2.urlopen(url)51 mybytes =fp.read()52 myWebStr = mybytes.decode("gbk") #这里读取出来要从bytes到文本

53 fp.close()54 returnmyWebStr55

56

57 furls.write(url+'\n')58

59 myWebStr =gethtml(url)60 ifmyWebStr:61 savemails(myWebStr)62 firstUrls =geturls(myWebStr)63 iffirstUrls:64 for i inrange(0,len(firstUrls)):65 html =gethtml(firstUrls[i])66 ifhtml:67 savemails(html)68 ## tempurls = geturls(html) #这里本来想再抓一层,慢得要死,就没再继续了

69 ## if tempurls:

70 ## nexturls = nexturls + tempurls

71

72 ## if nexturls:

73 ## for i in range(0,len(nexturls)):

74 ## nexthtml = gethtml(nexturls[i])

75 ## if nexthtml:

76 ## savemails(nexthtml)

77

80 fmail.close()81 furls.close()82

现在这个程序存在的问题就是:

1.如果直接运行,就会出现编码问题:

Traceback (most recent call last):

File"E:\py\crawler.py", line 67, in savemails(html)

File"E:\py\crawler.py", line 46, insavemails

fmail.write(u)

UnicodeEncodeError:'ascii' codec can't encode character u'\u81f3'in position 0: ordinal not in range(128)

然后我google之,是因为编码问题。

reload(sys)

sys.setdefaultencoding("utf8")

用这个方法即可解决,即我在最开始的代码里面第7,8注释的两行。不过问题又出现了,虽然不会出现上面的报错,但是第45行的 print 语句无效了。而且无论在何处的print语句均无效了。这是为何。。。。。。

在46行中,我试着把出现问题的部分print出来,发现,是因为链接中里面出现了:

至huaweibiancheng@163.com

然后fmail.write(u)的时候,碰到这种就写不了。我查了下,刚好‘至’的unicode 编码就是 81f3 (在这里查http://ipseeker.cn/tools/pywb.php)

到此处,难道是write()不能写中文?我用如下代码测试:

poem = '至huaweibiancheng@163.com'f= open("E:/py/poem.txt","w")

f.write(poem)

f.close()

f= open("E:/py/poem.txt",'r')whileTrue:

line=f.readline()if len(line) ==0:break

print(line)

f.close()

结果:

至huaweibiancheng@163.com

接着把代码中,改成“poem = u'\u81f3' ”,一模一样的错误出现了:

Traceback (most recent call last):

File"E:\py\test.py", line 212, in f.write(poem)

UnicodeEncodeError:'ascii' codec can't encode character u'\u81f3'in position 0: ordinal not in range(128)

也就是说,在抓取的网页中是以 " u'\u81f3'huaweibiancheng@163.com " 存在。然后不能写入文件,出错。

求高人解答啊。。。。

python最简单的爬取邮箱地址_python简单爬虫,抓取邮箱相关推荐

  1. java爬虫抓取网页数据论坛_Java爬虫抓取网页

    Java爬虫抓取网页原作者:hebedich  原文链接 下面直接贴代码: import java.io.BufferedReader; import java.io.InputStreamReade ...

  2. python爬虫抓取动态网页数据_python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例...

    一,尝试用BeautifulSoup抓取 先打开KFC网站门店列表页面:http://www.kfc.com.cn/kfccda/storelist/index.aspx 可以看到门店列表如下图: 打 ...

  3. android爬取视频播放地址,Android 视频中抓取图像 - MediaMetadataRetriever

    最近在side project中遇到了需要从视频中抓取多张图片的需求.安卓已经提供了从视频获取预览图片的ThumbnailUtils, 但此类不能根据timestamp获取bitmap. 以下记录自己 ...

  4. python网页数据存入数据库_python网络爬虫抓取动态网页并将数据存入数据库MySQL...

    简述 以下的代码是使用python实现的网络爬虫,抓取动态网页 http://hb.qq.com/baoliao/ .此网页中的最新.精华下面的内容是由JavaScript动态生成的.审查网页元素与网 ...

  5. python数据库抓取并保存_python:微信消息抓取、转发和数据库存储及源码

    前言 python的强大在于丰富的类库,经常会看到几行代码就可以实现非常强大的功能.它可以做爬虫.AI.自动化测试.小工具(抢票.抓包.微信消息抓取)等等. 本次我们来讲讲怎么来抓取微信消息?抓取微信 ...

  6. python搞笑动态图_python小爬虫抓取搞笑图片

    大部分小程序都是基于py2.7的,我于是便想直接出一个py3.4最新版本的教程.大致看一下第一篇了解一下的一些概念性的东西以及bs4第三方库的使用.请参考文末. 我们的第一个小程序的相关要求: 目标: ...

  7. python爬取新闻网站标题_python如何正确抓取网页标题

    有一个简单的错误.HTML文件不能用正则表达式parse,因为他的文法比正则表达式高级,具体原因参考这里. 推荐解析这种HTML用一些第三方库,例如mechanize 我的代码如下:import me ...

  8. python音乐的数据抓取与分析_Python练习之抓取QQ音乐数据

    [一.目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json.o ...

  9. 爬虫抓取页面数据原理(php爬虫框架有很多 )

    爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...

最新文章

  1. wxPython 笔记(3)基本结构
  2. python map(function, iterable, ...) 内置函数的用法 (序列迭代调用并返回)
  3. oh-my-zsh upgrade problem
  4. 事件传递 java_将事件传递/发送到父组件?
  5. bzoj 2296: 【POJ Challenge】随机种子
  6. php 图片无法删除,php如何删除上传的图片
  7. html清楚css的影响,08、清除浮动的影响.html
  8. 新生成长记;关于zzulioj1056,幸运数字
  9. centos linux引导修复_【Linux 运维】 Centos7.x 系统修复模式
  10. java计算加速减速_java – 使用JOCL / OPENCL计算强度的加速总和
  11. Python之路【第十六篇续】Django进阶篇
  12. 30个Python极简代码
  13. 使用Jacob自动替换书签内容
  14. 质变的小米:从铁人三项到AIoT
  15. Basic4IOS B4I开发原生iOS,Visual Studio中编程
  16. 3D打印——从solidworks到打印机(含打印机常见问题及解决方法)
  17. 西游降魔之东去的西游
  18. 什么是back annotation
  19. ManualResetEvent用法详解
  20. 关闭vscode链接检查,去掉VSCODE 编辑器的链接下划线

热门文章

  1. 解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .
  2. 解决在C#(.net)按字节数截取字符串最后出现乱码的问题
  3. Spark程序运行常见错误解决方法以及优化
  4. 解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题
  5. 为什么静态方法在Java中不能是抽象的
  6. 如何在Mac OS X上启动PostgreSQL服务器?
  7. teginx编译安装FAQ
  8. Docker Toolbox Looks like something went wrong
  9. 2014年7月17日学习笔记--PHP的循环结构学习
  10. 产品策略研究期的数据分析与挖掘