详解Python网络爬虫功能的基本写法


Posted in Python onJanuary 28, 2016

网络爬虫,即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。

1. 网络爬虫的定义

网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。这样看来,网络爬虫就是一个爬行程序,一个抓取网页的程序。网络爬虫的基本操作是抓取网页。

2. 浏览网页的过程

抓取网页的过程其实和读者平时使用IE浏览器浏览网页的道理是一样的。比如说你在浏览器的地址栏中输入    www.baidu.com  这个地址。

打开网页的过程其实就是浏览器作为一个浏览的“客户端”,向服务器端发送了 一次请求,把服务器端的文件“抓”到本地,再进行解释、展现。

HTML是一种标记语言,用标签标记内容并加以解析和区分。浏览器的功能是将获取到的HTML代码进行解析,然后将原始的代码转变成我们直接看到的网站页面。

3. 基于python实现的网络爬虫功能

1). python获取html页面

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

import urllib2
content = urllib2.urlopen('http://XXXX').read()

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

2). python爬虫抓取页面后解析html方法

python爬虫html解析库SGMLParser

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

import urllib2
from sgmllib import SGMLParser
 
class ListName(SGMLParser):
def __init__(self):
SGMLParser.__init__(self)
self.is_h4 = ""
self.name = []
def start_h4(self, attrs):
self.is_h4 = 1
def end_h4(self):
self.is_h4 = ""
def handle_data(self, text):
if self.is_h4 == 1:
self.name.append(text)
 
content = urllib2.urlopen('http://169it.com/xxx.htm').read()
listname = ListName()
listname.feed(content)
for item in listname.name:
print item.decode('gbk').encode('utf8')

  很简单,这里定义了一个叫做 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), ...] 的形式传回。

python爬虫html解析库pyQuery

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

sudo apt-get install python-pyquery

以下例子:

from pyquery import PyQuery as pyq
doc=pyq(url=r'http://169it.com/xxx.html')
cts=doc('.market-cat')
 
for i in cts:
print '====',pyq(i).find('h4').text() ,'===='
for j in pyq(i).find('.sub'):
print pyq(j).text() ,
print '\n'

python爬虫html解析库BeautifulSoup

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

以上就是本文的全部内容,对Python网络爬虫功能的实现进行了详细的分析介绍,希望对大家的学习有所帮助。

Python 相关文章推荐
python实现代码行数统计示例分享
Feb 10 Python
Python import用法以及与from...import的区别
May 28 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
python实现各进制转换的总结大全
Jun 18 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
用django设置session过期时间的方法解析
Aug 05 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python利用命名空间解析XML文档
Aug 10 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
Python3实现Web网页图片下载
Jan 28 #Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 #Python
Python每天必学之bytes字节
Jan 28 #Python
Python装饰器入门学习教程(九步学习)
Jan 28 #Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 #Python
使用Python写个小监控
Jan 27 #Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 #Python
You might like
深入php self与$this的详解
2013/06/08 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
关于单文件组件.vue的使用
2018/09/20 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
python中如何打包用户自定义模块
2020/09/23 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
物业门卫岗位职责
2013/12/28 职场文书
爱情检讨书大全
2014/01/21 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
先进事迹演讲稿
2014/09/01 职场文书
政风行风建设整改方案
2014/10/27 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
Apache POI的基本使用详解
2021/11/07 Servers
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS