详解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中集合类型(set)学习小结
Jan 28 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
Python 多核并行计算的示例代码
Nov 07 Python
Python基础教程之异常详解
Jan 10 Python
Python+Redis实现布隆过滤器
Dec 08 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
解决python 找不到module的问题
Feb 12 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
Feb 13 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 Python
pandas DataFrame运算的实现
Jun 14 Python
Django DRF APIView源码运行流程详解
Aug 17 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三元运算符知识汇总
2015/07/02 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Django框架自定义session处理操作示例
2019/05/27 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
党员教师工作决心书
2014/03/13 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
教师求职信
2014/06/17 职场文书
建设工程授权委托书
2014/09/22 职场文书
撤诉申请怎么写
2015/05/19 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
React四级菜单的实现
2022/04/08 Javascript
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python