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

网络爬虫,即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网络爬虫功能的实现进行了详细的分析介绍,希望对大家的学习有所帮助。

(0)

相关推荐

  • Python网络爬虫实例讲解

    聊一聊Python与网络爬虫. 1.爬虫的定义 爬虫:自动抓取互联网数据的程序. 2.爬虫的主要框架 爬虫程序的主要框架如上图所示,爬虫调度端通过URL管理器获取待爬取的URL链接,若URL管理器中存在待爬取的URL链接,爬虫调度器调用网页下载器下载相应网页,然后调用网页解析器解析该网页,并将该网页中新的URL添加到URL管理器中,将有价值的数据输出. 3.爬虫的时序图 4.URL管理器 URL管理器管理待抓取的URL集合和已抓取的URL集合,防止重复抓取与循环抓取.URL管理器的主要职能如下图

  • Python网络爬虫项目:内容提取器的定义

    1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作中. 2. 解决方案 为了解决这个问题,我们把影响通用性和工作效率的提取器隔离出来,描述了如下的数据处理流程图: 图中"可插拔提取器"必须很强的模块化,那么关键的接口有: 标准化的输入:以标准的HTML DOM对象为输入 标准化的内容提取:使用标准的xslt模板提取网页内容 标准化的输出:

  • python 网络爬虫初级实现代码

    首先,我们来看一个Python抓取网页的库:urllib或urllib2. 那么urllib与urllib2有什么区别呢? 可以把urllib2当作urllib的扩增,比较明显的优势是urllib2.urlopen()可以接受Request对象作为参数,从而可以控制HTTP Request的header部. 做HTTP Request时应当尽量使用urllib2库,但是urllib.urlretrieve()函数以及urllib.quote等一系列quote和unquote功能没有被加入urll

  • python3使用urllib模块制作网络爬虫

    urllib urllib模块是python3的URL处理包 其中: 1.urllib.request主要是打开和阅读urls 个人平时主要用的1: 打开对应的URL:urllib.request.open(url) 用urllib.request.build_opener([handler, ...]),来伪装成对应的浏览器 import urllib #要伪装成的浏览器(我这个是用的chrome) headers = ('User-Agent','Mozilla/5.0 (Windows N

  • Python网络爬虫出现乱码问题的解决方法

    关于爬虫乱码有很多各式各样的问题,这里不仅是中文乱码,编码转换.还包括一些如日文.韩文 .俄文.藏文之类的乱码处理,因为解决方式是一致的,故在此统一说明. 网络爬虫出现乱码的原因 源网页编码和爬取下来后的编码格式不一致. 如源网页为gbk编码的字节流,而我们抓取下后程序直接使用utf-8进行编码并输出到存储文件中,这必然会引起乱码 即当源网页编码和抓取下来后程序直接使用处理编码一致时,则不会出现乱码; 此时再进行统一的字符编码也就不会出现乱码了 注意区分 源网编码A. 程序直接使用的编码B. 统

  • 以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法

    在这篇文章中,我们将分析一个网络爬虫. 网络爬虫是一个扫描网络内容并记录其有用信息的工具.它能打开一大堆网页,分析每个页面的内容以便寻找所有感兴趣的数据,并将这些数据存储在一个数据库中,然后对其他网页进行同样的操作. 如果爬虫正在分析的网页中有一些链接,那么爬虫将会根据这些链接分析更多的页面. 搜索引擎就是基于这样的原理实现的. 这篇文章中,我特别选了一个稳定的."年轻"的开源项目pyspider,它是由 binux 编码实现的. 注:据认为pyspider持续监控网络,它假定网页在一

  • python网络爬虫采集联想词示例

    python爬虫_采集联想词代码 复制代码 代码如下: #coding:utf-8import urllib2import urllibimport reimport timefrom random import choice#特别提示,下面这个list中的代理ip可能失效,请换上有效的代理ipiplist  = ['27.24.158.153:81','46.209.70.74:8080','60.29.255.88:8888'] list1 = ["集团","科技&quo

  • 基于Python实现的百度贴吧网络爬虫实例

    本文实例讲述了基于Python实现的百度贴吧网络爬虫.分享给大家供大家参考.具体如下: 完整实例代码点击此处本站下载. 项目内容: 用Python写的百度贴吧的网络爬虫. 使用方法: 新建一个BugBaidu.py文件,然后将代码复制到里面后,双击运行. 程序功能: 将贴吧中楼主发布的内容打包txt存储到本地. 原理解释: 首先,先浏览一下某一条贴吧,点击只看楼主并点击第二页之后url发生了一点变化,变成了: http://tieba.baidu.com/p/2296712428?see_lz=

  • 使用Python编写简单网络爬虫抓取视频下载资源

    我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎,所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚本语言,没有之一.Python的语言简洁灵活,标准库功能强大,平常可以用作计算器,文本编码转换,图片处理,批量下载,批量处理文本等.总之我很喜欢,也越用越上手,这么好用的一个工具,一般人我不告诉他... 因为其强大的字符串处理能力,以及urllib2,cookielib,re,threading这些

  • python使用rabbitmq实现网络爬虫示例

    编写tasks.py 复制代码 代码如下: from celery import Celeryfrom tornado.httpclient import HTTPClientapp = Celery('tasks')app.config_from_object('celeryconfig')@app.taskdef get_html(url):    http_client = HTTPClient()    try:        response = http_client.fetch(u

随机推荐