详解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 HTMLParser模块解析html获取url实例
Apr 08 Python
Python多线程结合队列下载百度音乐的方法
Jul 27 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
python3中sys.argv的实例用法
Apr 24 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
python实现简单石头剪刀布游戏
Oct 24 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实现仿Google分页效果的分页函数
2015/07/29 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
QQ登录简单实现代码
2021/03/09 Javascript
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
学习ExtJS Window常用方法
2009/10/07 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
wxPython实现整点报时
2019/11/18 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
英国景点门票网站:attractiontix
2019/08/27 全球购物
公司活动策划方案
2014/01/13 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
个人收入证明范本
2015/06/12 职场文书
在校证明模板
2015/06/17 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python