详解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简单实现旋转图片的方法
May 30 Python
Python文本特征抽取与向量化算法学习
Dec 22 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
python 定时修改数据库的示例代码
Apr 08 Python
对python中的logger模块全面讲解
Apr 28 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python解析json代码实例解析
Nov 25 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 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
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
FireFox JavaScript全局Event对象
2009/06/14 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
李宁官方网店:中国运动品牌
2017/11/02 全球购物
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
演讲稿开场白
2014/01/13 职场文书
甜品店创业计划书
2014/08/14 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2014财务年度工作总结
2014/11/11 职场文书
工作失误检讨书范文
2015/01/26 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
关于Python中进度条的六个实用技巧分享
2022/04/05 Python