python爬虫入门(一)

python爬虫入门(一)

由于学习的需要,最近学习了爬虫知识,学习之余把最近学习的知识进行整理方便以后查看,顺便和其他小伙伴一起交流学习爬虫的心得。

1. 什么是爬虫

如果把互联网比喻成一张蜘蛛网的话,那么各种硬件设施(服务器,pc机等)就是附着在这张蜘蛛网上的一只只蜘蛛,同时各种网络资源存放在不同的硬件设施中,而爬虫就是沿着这张蜘蛛网,到每一个硬件设施中找到自己需要的资源,将这些资源爬取到自己的硬件中的一个程序。

2.哪些语言可以写爬虫

现在各种主流语言一般都支持爬虫,如java,python,c++等,本文主要介绍的是由python编写的爬虫(python版本为3.7)。

3.urllib

urllib库是python的一个内置库,也是我们初学爬虫时一个非常重要的库,它可以向服务器发送请求并获得网络资源,首先我们先来了解一下urllib。

import urllib
print(dir(urllib))

[’__builtins__’, ‘__cached__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__path__’, ‘__spec__’, ‘error’, ‘parse’, ‘request’, ‘response’]

可以看到除了python内置的属性之外,urllib还包括四个属性:error、parse、request、response,python官方解释如下:

request:Extensible library for opening URLs(用于打开url的可扩展库,也就是说,这个属性可以用来打开我们需要的url地址)
error:Exception classes raised by urllib.request(urllib.request引发的异常类)
parse: Parse URLs into components(将URL解析为组件)
response:Response classes used by urllib(urllib使用的响应类)
其中最重要的就是request这个属性,我们访问url地址时使用的就是这个属性,其他的属性功能在后面我们也会介绍

4.request

request最简单的操作就是打开一个url地址

# -*- coding: utf-8 -*-
#引入urllib.request
import urllib.request
#使用urllib下的urlopen方法打开url地址
response=urllib.request.urlopen("https://www.baidu.com")
print(response.read())

在这里插入图片描述
可以看到通过使用request的urlopen方法,得到了一个上下文管理工作器的对象,通过其read方法得到了响应对象的字节数组。或者可以指定read方法的字符集来改变文本的输出方式。

#引入urllib.request
import urllib.request
#使用urllib下的urlopen方法打开url地址
response=urllib.request.urlopen("https://www.baidu.com")
print(response.read().decode("utf8"))

在这里插入图片描述将read方法的字符集改为utf8之后,结果按一般字符串输出

下面我们详细介绍一下request下的urlopen方法,python官方给定的文档中对其的定义如下:\

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

可以看到urlopen除了可以传递需打开的url地址这一个参数之外,还可以传递其他几个参数,其具体意义如下:
data:需要传递的参数,在url地址中,我们经常需要传递参数,如www.XXXX.com?name=python,其中name=python就可以通过data参数传递。需要注意的是:
1.一般使用data传递参数,那么请求就是POST请求,如果不使用,则默认是GET请求。
2.data参数规定必须传递的是bytes object,也就是字节数组,一般我们使用urllib.parse.urlencode()来进行参数转换,具体的操作后面会进行演示
timeout:用来设置超时时间,防止请求时间过长,单位是秒,不填使用默认时间
cafile:是指向单独文件的,包含了一系列的CA认证 (很少使用,默认即可)
capath:是指向文档目标,也是用于CA认证(很少使用,默认即可);
cadefault:可以忽略
context:设置SSL加密传输(很少使用,默认即可)

下面我们写一个传递参数的小例子:

import urllib.request
import urllib.parse
#使用urllib.parse.urlencode方法进行参数转换,再将转换后的参数转为字节数组
param=bytes(urllib.parse.urlencode({"name":"python","password":"123"}),encoding="utf8")
#http://httpbin.org/post,这个网站可以查看我们访问时的各种信息,包括传递的参数等
response=urllib.request.urlopen("http://httpbin.org/post",data=param,timeout=3)
print(response.read().decode("utf8"))

在这里插入图片描述
通过获得的结果我们可以看到我们成功访问url,并成功传递name,password两个参数给服务器、

添加请求头

打开浏览器调试模式,我们可以看到浏览器的每一次请求其实都包括很多头部信息:
在这里插入图片描述
如不过将这些头部信息写入我们的请求中去的话,服务器很容易就知道我们是一个爬虫而不是一次请求,从而可能会阻止我们的访问,重新运行上一次代码,我们可以看到
在这里插入图片描述
目标服务求已经识别我们为一个python爬虫,所以,我们要在请求时添加必要的头部信息

import urllib.request
import urllib.parse
#包装头部信息
header={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}
#urllib.request.Request方法中可以设置url地址,data,headers等等,其中heanders表示需要添加的头部,method表示请求的方法,同时会返回一个request对象
request=urllib.request.Request("http://httpbin.org/get",headers=header,method="get")
response=urllib.request.urlopen(request)
print(response.read().decode("utf8"))

在这里插入图片描述可以看到,我们已经成功将自己伪装为一个谷歌浏览器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值