Python网络爬虫基础

1.什么是爬虫

爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张
大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。

2.浏览网页的过程

在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如
http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,
这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,
向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器
HTML、JS、CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了。

因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这
些内容,通过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。

3.URL的含义

URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网
上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网
上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL的格式由三部分组成:
①第一部分是协议(或称为服务方式)。
②第二部分是存有该资源的主机IP地址(有时也包括端口号)。
③第三部分是主机资源的具体地址,如目录和文件名等。

爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依
据,准确理解它的含义对爬虫学习有很大帮助。

4.Python 3.x 版本后的urllib和urllib2

在Python 3以后的版本中,urllib2这个模块已经不单独存在(也就是说当
你import urllib2时,系统提示你没这个模块),urllib2被合并到了urllib中,
叫做urllib.request 和 urllib.error 。

urllib整个模块分为urllib.request, urllib.parse, urllib.error。

例:
其中urllib2.urlopen()变成了urllib.request.urlopen()
urllib2.Request()变成了urllib.request.Request()

5.urllib和urllib2模块之间的区别

在python中,urllib和urllib2不可相互替代的。

整体来说,urllib2是urllib的增强,但是urllib中有urllib2中所没有的函数。

urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访
问一个网站,想更改User Agent(可以伪装你的浏览器),你就要用urllib2.

urllib支持设置编码的函数,urllib.urlencode,在模拟登陆的时候,经常要post
编码之后的参数,所以要想不使用第三方库完成模拟登录,你就需要使用urllib。

urllib一般和urllib2一起搭配使用。

6. Python3.5 urllib官方文档

① urllib.request.urlopen()

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,
capath=None, cadefault=False, context=None)

第三个参数timeout
例如timeout=10就是指定请求等待时间

7.设置Headers

import urllib.request as ur
response = ur.urlopen(“http://www.baidu.com“).read().decode(“utf-8”)
print(response)

有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本
不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性。

8.代理设置

import urllib.request as ur

enableProxy = True
proxHandler = ur.ProxyHandler({"http":'http://some-proxy.com:8080'})
nullProxyHandler = ur.ProxyHandler({})
if enableProxy:
    oppener = ur.build_opener(proxHandler)
else:
    oppener = ur.build_opener(nullProxyHandler)
ur.install_opener(oppener)

10.URLError异常

首先解释下URLError可能产生的原因:

①网络无连接,即本机无法上网
②连接不到特定的服务器
③服务器不存在
在代码中,我们需要用try-except语句来包围并捕获相应的异常

11.HTTPError异常

HTTPError是URLError的子类,在你利用urlopen方法发出一个请求时,服
务器上都会对应一个应答对象response,其中它包含一个数字”状态码”。
举个例子,假如response是一个”重定向”,需定位到别的地址获取文档,
ur将对此进行处理。

其他不能处理的,urlopen会产生一个HTTPError,对应相应的状态吗,
HTTP状态码表示HTTP协议所返回的响应的状态

400:非法请求     处理方式:丢弃
401:未授权     处理方式:丢弃
403:禁止     处理方式:丢弃
404:没有找到     处理方式:丢弃
500:服务器内部错误  服务器遇到了一个未曾预料的状况,导致了它无
法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
501:服务器无法识别  服务器不支持当前请求所需要的某个功能。当服务
器无法识别请求的方法,并且无法支持其对任何资源的请求。
502:错误网关  作为网关或者代理工作的服务器尝试执行请求时,从上
游服务器接收到无效的响应。
503:服务出错   由于临时的服务器维护或者过载,服务器当前无法处理
请求。这个状况是临时的,并且将在一段时间以后恢复。

12.Cookie

为什么要使用Cookie呢?

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的
数据(通常经过加密)

比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容
是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他
页面就达到目的了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆豆orz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值