详解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程序与C++程序的联合使用
Apr 07 Python
python计算对角线有理函数插值的方法
May 07 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
详解Python学习之安装pandas
Apr 16 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
详解python常用命令行选项与环境变量
Feb 20 Python
Django接收照片储存文件的实例代码
Mar 07 Python
python pip如何手动安装二进制包
Sep 30 Python
Pandas直接读取sql脚本的方法
Jan 21 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
JavaScript经典效果集锦
2010/07/06 Javascript
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
python中 * 的用法详解
2019/07/10 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
法学个人求职信范文
2014/01/27 职场文书
迎八一活动主题
2014/01/31 职场文书
会计助理岗位职责
2014/02/17 职场文书
关于保护环境的建议书
2014/05/13 职场文书
食品安全标语
2014/06/07 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
国庆庆典邀请函
2015/02/02 职场文书
黄埔军校观后感
2015/06/10 职场文书
宾馆安全管理制度
2015/08/06 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS