转自:http://www.lovelucy.info/python-crawl-pages.html

CUHK上学期有门课叫做Semantic Web,课程project是要搜集整个系里面的教授信息,输入到一个系统里,能够完成诸如“如果选了A教授的课,因时间冲突,B教授的哪些课不能选”、“和A教授实验室相邻的实验室都是哪些教授的”这一类的查询。这就是所谓的“语义网”了啊。。。然而最坑爹的是,所有这些信息,老师并没有给一个文档或者数据库,全要靠自己去系主页上搜集。唯一的想法是写个爬虫,令人悲哀的是,所有做这个project的同学,都是纯人肉手工完成,看得我只想扶墙。。。

从网页中抓取特定信息,我觉得这是一个普遍性的问题,以后经常会遇到。幸亏那个project只是需要我们系的所有教授的信息,大家人工也就算了。如果需要抓取的信息是海量的,举个栗子,把淘宝上所有的商品目录抓下来,那岂不是要吐血而亡?我决定好好把爬虫研究一下。

之前波波写过一个Java程序,利用HTML Parser去解析团购网站meituan.com然后把每天的团购信息存到数据库里。稍微改改再爬爬拉手糯米,做个前端,一个团购导航站就问世了。我把程序跑了一下,全自动搜集,不算太复杂。

但是,我觉得java太啰嗦,不够简洁。Python这个脚本语言开发起来速度很快,一个活生生的例子是因有关政策verycd开始自我阉割,有网友为了抢救资源,把整个verycd站爬了下来,镜像为SimpleCD.org。看了一下爬虫源代码,其实挺简单。使用方法:

[python] view plaincopy
  1. python sitecopy.py http://www.163.com

看看效果:http://www.lovelucy.info/demo/www.163.com

1. 获取html页面

其实,最基本的抓站,两句话就可以了

[python] view plaincopy
  1. import urllib2
  2. content = urllib2.urlopen('http://XXXX').read()

这样可以得到整个html文档,关键的问题是我们可能需要从这个文档中获取我们需要的有用信息,而不是整个文档。这就需要解析充满了各种标签的html。

2. 解析html

SGMLParser

Python默认自带HTMLParser以及SGMLParser等等解析器,前者实在是太难用了,我就用SGMLParser写了一个示例程序:

[python] view plaincopy
  1. import urllib2
  2. from sgmllib import SGMLParser
  3. class ListName(SGMLParser):
  4. def __init__(self):
  5. SGMLParser.__init__(self)
  6. self.is_h4 = ""
  7. self.name = []
  8. def start_h4(self, attrs):
  9. self.is_h4 = 1
  10. def end_h4(self):
  11. self.is_h4 = ""
  12. def handle_data(self, text):
  13. if self.is_h4 == 1:
  14. self.name.append(text)
  15. content = urllib2.urlopen('http://list.taobao.com/browse/cat-0.htm').read()
  16. listname = ListName()
  17. listname.feed(content)
  18. for item in listname.name:
  19. print item.decode('gbk').encode('utf8')

注意:我的电脑是win7中文系统,为了避免出现乱码,最后一行使用

[python] view plaincopy
  1. for item in listname.name:
  2. print item

很简单,这里定义了一个叫做ListName的类,继承SGMLParser里面的方法。使用一个变量is_h4做标记判定html文件中的h4标签,如果遇到h4标签,则将标签内的内容加入到List变量name中。解释一下start_h4()和end_h4()函数,他们原型是SGMLParser中的

start_tagname(self, attrs)
end_tagname(self)

tagname就是标签名称,比如当遇到<pre>,就会调用start_pre,遇到</pre>,就会调用 end_pre。attrs为标签的参数,以[(attribute, value), (attribute, value), ...]的形式传回。

输出:

虚拟票务
数码市场
家电市场
女装市场
男装市场
童装童鞋
女鞋市场
男鞋市场
内衣市场
箱包市场
服饰配件
珠宝饰品
美容市场
母婴市场
家居市场
日用市场
食品/保健
运动鞋服
运动户外
汽车用品
玩具市场
文化用品市场
爱好市场
生活服务

如果有乱码,可能是与网页编码不一致,需要替换最后一句deconde()的参数,我在HK淘宝默认用的是繁体编码。各位可以copy上面的代码自己试试,把淘宝的商品目录抓下来,就是这么简单。稍微改改,就可以抽取二级分类等其他信息。

pyQuery

pyQuery是jQuery在python中的实现,能够以jQuery的语法来操作解析HTML文档,十分方便。使用前需要安装,easy_install pyquery即可,或者Ubuntu下

[python] view plaincopy
  1. sudo apt-get install python-pyquery

以下例子:

[python] view plaincopy
  1. from pyquery import PyQuery as pyq
  2. doc=pyq(url=r'http://list.taobao.com/browse/cat-0.htm')
  3. cts=doc('.market-cat')
  4. for i in cts:
  5. print '====',pyq(i).find('h4').text() ,'===='
  6. for j in pyq(i).find('.sub'):
  7. print pyq(j).text() ,
  8. print '\n'

BeautifulSoup

有个头痛的问题是,大部分的网页都没有完全遵照标准来写,各种莫名其妙的错误令人想要找出那个写网页的人痛打一顿。为了解决这个问题,我们可以选择著名的BeautifulSoup来解析html文档,它具有很好的容错能力。

BeautifulSoup功能强大,我还在研究中,有进展会更新本文。

Python 网页爬虫相关推荐

  1. python网页爬虫-python网页爬虫浅析

    Python网页爬虫简介: 有时候我们需要把一个网页的图片copy 下来.通常手工的方式是鼠标右键 save picture as ... python 网页爬虫可以一次性把所有图片copy 下来. ...

  2. python网页爬虫-Python网页爬虫

    曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python.离开腾讯创业后,第一个作品课程图谱也是选 ...

  3. Python 网页爬虫 文本处理 科学计算 机器学习 数据挖掘兵器谱 - 数客

    曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python.离开腾讯创业后,第一个作品课程图谱也是选 ...

  4. Python 网页爬虫 文本处理 科学计算 机器学习 数据挖掘兵器谱

    Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 2015-04-27 程序猿 程序猿 来自:我爱自然语言处理,www.52nlp. ...

  5. python网页爬虫+简单的数据分析

    python网页爬虫+简单的数据分析 文章目录 python网页爬虫+简单的数据分析 一.数据爬取 二.数据分析 1.我们今天爬取的目标网站是:http://pm25.in/ 2.需要爬取的目标数据是 ...

  6. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...

  7. Python网页爬虫--

    pycharm里安装beautifulSoup以及lxml,才能使爬虫功能强大. 做网页爬虫需要,<网页解析器:从网页中提取有价值数据的工具 http://blog.csdn.net/ochan ...

  8. python 网页爬虫nike_python网络爬虫-爬取网页的三种方式(1)

    0.前言 0.1 抓取网页 本文将举例说明抓取网页数据的三种方式:正则表达式.BeautifulSoup.lxml. 获取网页内容所用代码详情请参照Python网络爬虫-你的第一个爬虫.利用该代码获取 ...

  9. python网页爬虫菜鸟教程_【爬虫】菜鸟教程,支持翻页,存储

    1.项目简介 豆瓣相信很多人都爬过,我也把我的方法拿出来交流学习,我也是菜鸟过来的,不会省略代码,此教程纯属娱乐,大神勿喷. 2.工具 requests re pygal mysql Anacond2 ...

  10. python网页爬虫循环获取_手把手教你用 Python 搞定网页爬虫

    原标题:手把手教你用 Python 搞定网页爬虫 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑性并且最容易获得的 ...

最新文章

  1. 【 FPGA 】FIR 滤波器之Single-rate FIR滤波器的系数数据(Filter Coefficient Data)
  2. 突破androidstudio 的控制
  3. hibernate之Configuration对象
  4. ORACLE设置用户密码不过期
  5. 报错笔记:linux 命令行中的print输出内容无法重定向到文件中
  6. Visual Studio Code里关于ESLint的错误消息
  7. MySQL 获取系统时间/系统日期/日期时间的函数
  8. Android 使用imageLoader来加载显示图片
  9. php accept-length,php中Accept-Length获取不到下载文件的大小
  10. Mysql自定义Sequence-实现序列自增功能
  11. php 查看session 时间,php中session过期时间设置及session回收机制介绍
  12. 建立项目工作节奏之华为时间管理大法
  13. Web安全 Msfconsole攻击技术(成功拿下服务器最高权限.)
  14. 已知主机IP地址,计算网络地址和广播地址
  15. 三星Q950T全景声回音壁测试心得
  16. windows自动化操作——程序员必备
  17. 6plus经常显示无服务器,苹果6plus屏幕失灵怎么办?如何解决?
  18. easypoi利用模板导出图片到Excel;解决easypoi导出图片到合并单元格单元格被拉伸的问题
  19. 伽罗华域(Galois Field)理解、基于伽罗华域的四则运算(附详细python代码)
  20. [日推荐] 『TheGolfGame』-小程序有游戏啦?

热门文章

  1. 匈牙利算法求最大匹配
  2. mysql 高级查询总结_MySQL高级查询
  3. 永磁无刷电机及其驱动技术_「技术」某种车型后驱动桥装配工艺及其工装的设计...
  4. 第二章计算机组成原理例题,计算机组成原理习题第二章运算方法和运算器
  5. Golang 大杀器之性能剖析 PProf
  6. [python] 解决OSError: Address already in use
  7. 美科学家研发能从干燥的沙漠空气中造水的新设备
  8. Golang让协程交替输出
  9. LNMP架构 源码安装nginx+mysql+php+memcache+论坛
  10. 临危不惧和力记易让容灾也有真本事