爬虫学习笔记(二):数据爬取

爬虫学习笔记(二)
数据爬取:

  1. 什么是数据爬取
    就是根据url来获取它的网页信息,很多时候我们在浏览器里面看到的是各种各样的页面,其实是由浏览器解释才呈现出来的,实质它是一段html代码,加 js、css,最重要的部分是存在于html中的,举个简单地例子:
from urllib.request import urlopen
response = urlopen("http://www.baidu.com")
print(response.read().decode())
这样就得到了百度页面的信息了。
  1. 常见到的方法
  • requset.urlopen(url,data,timeout)
    • 第一个参数url即为爬取页面的url,第二个参数data是访问url时要传送的数据,第三个timeout是设置超时时间。
    • 第一个参数url是必须要传送的,但是后面两个则不用,data的默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT。
  • response.read()
    • read()方法就是读取文件里的全部内容,返回bytes类型。
  • response.getcode()
    • 返回http的响应码,成功返回200,4服务器页面出错,5服务器问题。
  • response.geturl()
    • 返回实际数据的实际url,防止重定向问题。
  • response.info()
    • 返回服务器响应的http报头。
  1. Request对象
    其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入url,data等等。比如上面的两行代码,我们可以改成(推荐方法):
from urllib.request import urlopen,Request
request = Request("http://www.baidu.com")
response = urlopen(request)
print(response.read().decode())
  1. get 请求

    大部分被传输到浏览器的html,images,js,css, … 都是通过get方法发出请求的。它是获取数据的主要方法。
    get请求的参数都是在url中体现的,一般情况下有中文,这时需要转码,这时我们可使用

    • urllib.parse.urlencode()
    • urllib.parse. quote()
  2. post 请求
    Request请求对象的里有data参数,它就是用在post里的,我们要传送的数据就是这个参数data,data是一个字典(表示为:{“key”:“value”})。

  3. 相应状态码

号码含义
100继续请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101切换协议请求者已要求服务器切换协议,服务器已确认并准备切换。
200服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201请求成功并且服务器创建了新的资源。
202服务器已接受请求,但尚未处理。
203服务器已成功处理了请求,但返回的信息可能来自另一来源。
204服务器成功处理了请求,但没有返回任何内容。
205服务器成功处理了请求,但没有返回 任何内容。
206服务器成功处理了部分 GET 请求。
300针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
305请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
400服务器不理解请求的语法。
401请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403服务器拒绝请求。
404服务器找不到请求的网页。
405禁用请求中指定的方法。
406无法使用请求的内容特性响应请求的网页。
407此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408服务器等候请求时发生超时。
409服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410如果请求的资源已永久删除,服务器就会返回此响应。
411服务器不接受不含有效内容长度标头字段的请求。
412服务器未满足请求者在请求中设置的其中一个前提条件。
413服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414请求的 URI(通常为网址)过长,服务器无法处理。
415请求的格式不受请求页面的支持。
416如果页面无法提供请求的范围,则服务器会返回此状态代码。
417服务器未满足"期望"请求标头字段的要求。
500服务器遇到错误,无法完成请求。
501服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502服务器作为网关或代理,从上游服务器收到无效响应。
503服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505服务器不支持请求中所用的 HTTP 协议版本。

http响应码来源于:https://www.cnblogs.com/CH-TNT/p/11438438.html

  1. ajax数据请求
    有些网页内容使用ajax加载,而ajax一般返回的是json,直接对ajax地址进行post或get,就可以返回json数据。
  2. 请求 SSL证书验证
    什么是ssl证书(有兴趣可以看)
    现在https的网站越来越多,urllib可以为 https请求验证SSL证书,就像web浏览器一样,如果网站的SSL证书是经过CA认证的,则能够正常访问。
    如果SSL证书验证不通过,或者操作系统不信任服务器的安全证书,在访问的时候就会警告用户证书不受信任。但是也可以采取对策:
context = ssl._create_unverified_context()#忽略安全认证
response = urllib.request.urlopen(request, context = context)#添加到context参数里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值