系统学习下python网络爬虫 笔记一

系统学习下python网络爬虫的知识

1、爬虫的定义

Web Spider,把互联网定义为一个蜘蛛网,网络蜘蛛通过网页的链接地址来寻找网页。

具体过程:从网站的某一个网页(通常是首页)开始,读取网页的内容,找到在网页中的其他链接地址,然后通过这些链接地址寻找下一个页面,这样一直循环下去,直到所有的网页都抓取完成为止。

其实,网络爬虫就是一个爬行程序,一个抓取网页的程序。我们如何才能找到自己想要的网页和去掉网页中其他不相关的部分?我们首先得找到自己想要的网页的URL.

2、浏览网页的过程

抓取网页的过程其实就是浏览器作为一个浏览的客户端,向服务器端发送了一次请求,把服务器端的文件抓到本地,再进行解释、展现。

HTML语言是一种标记语言,用标签标记内容并加以解析和区分。浏览器的功能是将获取到的HTML代码进行解析,然后将原始的代码转变成我们直接看到的网站页面。

3、URL

uniform resource locator的缩写,统一资源定位符。

URL的格式由三部分组成: 

a、第一部分是协议(或称为服务方式)。

b、第二部分是存有该资源的主机IP地址(有时也包括端口号)。

c、第三部分是主机资源的具体地址,如目录和文件名等。

第一部分和第二部分用“://”符号隔开,

第二部分和第三部分用“/”符号隔开。

第一部分和第二部分是不可缺少的,第三部分有时可以省略。

4、python中的urllib2模块抓取制定URL网页内容

我们所说的网页抓取工作,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。

urllib2是python的一个模块,使用函数urlopen获取网页源代码。

eg,最简单的应用代码:

import urllib2 response = urllib2.urlopen('https://gendertrender.wordpress.com/') content = response.read() print(content)

urllib2用一个Request对象来映射设置好的HTTP请求,并且用这个地址创建一个Request对象,通过调用urlopen并传入Request对象,将返回一个相关请求request对象,然后可以在Request中调用read()。

import urllib2 res = urllib2.Reaquest('https://gendertrender.wordpress.com/') response = urllib2.urlopen(req) content = response.read() print(content)

5、HTTP请求的操作

在HTTP请求时,可以额外做的两件事情。

a、发送data表单数据

发送一些数据到URL,比如用户登录信息,我们在抓取网页的过程中,有时候会涉及到登陆以后显示内容的网站,这个时候就会用到发送账号数据到URL。一般的HTML表单,data需要编码成标准形式。然后做为data参数传到Request对象。编码工作使用urllib的函数而非urllib2。

import urllib import urllib2 url = 'http://www.baidu.com/register.cgi' values = {'user':'qester'   'pwd':'******'} data = urllib.urlencode(values)#对values进行编码encode req = urllib2.Request(url,data) response = urllib2.urlopen(req) content = response.read() print content

如果没有传送data参数,urllib2使用GET方式的请求。

b、设置Headers和http请求

有一些站点不喜欢被程序访问,或者发送不同的版本到不同的浏览器。默认的urllib2是以”python-urllib/x.y”的身份进行访问的。对于这个身份站点会有不同的操作。对于这个情况,我们可以请求对象一个包含头数据的字典。把自己伪装起来。

import urllib     import urllib2        url = 'http://www.baidu.com/register.cgi'      user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'     values = {'name' : 'qester',               'location' : 'SDU',               'language' : 'Python' }        headers = { 'User-Agent' : user_agent } #把自身伪装成一个IE浏览器 data = urllib.urlencode(values)     req = urllib2.Request(url, data, headers)     response = urllib2.urlopen(req)     the_page = response.read()

6、异常的处理和HTTP状态码的分类

当urlopen不能够处理一个response时,产生urlError。HTTPError是urlError的子类,通常在特定的HTTP URLs中产生。

a、URLError

URLError在没有网络连接或者服务器不存在的情况下产生。异常会带有”reason”属性,它是一个tuple,包含了一个错误号和一个错误信息。

b、HTTPError

假如response是一个”重定向”,需要客户端从别的地址获取文档,urllib2将为你处理。其他不能处理的,urlopen会产生一个HTTPError。典型的错误包含”404″(页面无法找到),”403″(请求禁止),和”401″(带验证请求)。HTTP状态码表示HTTP协议所返回的响应的状态。比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。如果请求的资源不存在, 则通常返回404错误。

一般处理这两个异常最常用的方法如下:

from urllib2 import Request, urlopen, URLError, HTTPError   req = Request('http://bbs.csdn.net/callmewhy')   try:         response = urlopen(req)     except URLError, e:         if hasattr(e, 'code'):             print 'The server couldn\'t fulfill the request.'             print 'Error code: ', e.code         elif hasattr(e, 'reason'):             print 'We failed to reach a server.'             print 'Reason: ', e.reason        else:         print 'No exception was raised.'

此文由“快兔兔AI采集器”自动生成,目的为演示采集器效果,若侵权请及时联系删除。

原文链接:https://blog.51cto.com/jx610/1710869

更多内容