爬虫使用urllib库请求get方法和post方法讲解大全

urllib简介

urllib库是一个比较简单是爬虫库,有了它,我们只需要关心请求的链接是什么,需要传的参数是什么,以及如何设置可选的请求头就好了,不用深入到底层去理解它到底是怎样传输和通信的。有了它,两行代码就可以完成一个请求和响应的处理过程,得到网页内容。

使用urllib

request 它是最基本的 HTTP 请求模块,可以用来模拟发送请求,就像在浏览器里输入网址然后回车一样,只需要给库方法传入URL 及额外的参数,就可以模拟实现这个过程了。

error 异常处理模块,如果出现请求错误,我们可以捕捉这些异常,然后进行重试或者其他操作以保证程序不会意外终止。

parse 一个工具模块,提供了许多URL处理方法,比如拆分、解析、合并等。

robotparse 主要是用来识别网址的robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得比较少。

一、发起请求

1、使用urlopen()

urllib request 模块提供了最基本的构造 HTTP请求的方法, 利用它可以 拟浏览器的一个请求发起过程, 同时它还带有处理授权验证( authenticaton )、重定向( redirection 、浏览器 Cookies 及其他内容。

get请求

#使用urllib做简单的爬虫

##1.导入请求的模块
from urllib import request

#2.发起请求:
request = request.urlopen('http://www.jd.com')

#3.读取相应内容:
content = request.read()

#4.转码:
html = content.decode('utf-8')
print(html)

with open('jd.html','w',encoding='utf-8')as fp:
    fp.write(html)

如果我们在浏览器上打开百度主页,右键选择“查看源代码”,你会发现,跟我们刚才打印出来的是一模一样。也就是说,上面的 4 行代码就已经帮我们把百度的首页的全部代码爬了下来。

二、User-Age使用

但是这样直接用 urllib 给一个网站发送请求的话,确实略有些唐突了,就好比,人家每家都有门,你以一个路人的身份直接闯进去显然不是很礼貌。而且有一些站点不喜欢被程序(非人为访问)访问,有可能会拒绝你的访问请求。

但是如果我们用一个合法的身份去请求别人网站,显然人家就是欢迎的,所以我们就应
该给我们的这个代码加上一个身份,就是所谓的 User-Agent 头。

url= 'https://www.baidu.com/'
headers = {
    'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'
}

##1.封装请求头:
req = request.Request(url=url,headers=headers)

##2.发起请求
html = request.urlopen(req).read().decode('utf-8')

##3.保存
with open('baidu.html','w',encoding='utf-8')as f:
    f.write(html)

在 HTTP Request 中加入特定的 Header,来构造一个完整的 HTTP 请求消息。
可以通过调用 Request.add_header() 添加/修改一个特定的 header 也可以通过调用
Request.get_header()来查看已有的 header。

以上是get请求的方法,接下来看看post请求。

post请求
我们需要找到传递的参数,比如百豆瓣电影,需要传递‘type、inteval_id、start、limit’,对参数进行解析再使用请求。
在这里插入图片描述
多打开几个网址,分析哪些是变量,根据变量得不同,获取信息,再拼接url。

from urllib import request,parse
import json

base_url = 'https://movie.douban.com/j/chart/top_list?&action=&'

data = {
    'type':11,
    'interval_id':'100:90',
    'start':0,
    'limit':100
}

data_str = parse.urlencode(data)

url = base_url+data_str

content = request.urlopen(url=url).read().decode('utf-8')

content = json.loads(content)

with open('douban.json','w',encoding='utf-8')as f:
    for item in content:
        f.write(json.dumps(item,ensure_ascii=False)+'\n')


了解了请求方式,就能根据获取的网址进行请求得到自己想得到的数据,网址通过解析拼接得到。

进阶COOKIE的使用

当用户通过浏览器首次访问一个域名时,访问的 web 服务器会给客户端发送数据,以保持 web 服务器与客户端之间的状态保持,这些数据就是 cookie,它是 Internet 站点创建的,为了辨别用户身份而储存在用户本地终端上的数据,cookie 大部分都是加密的,cookie 存在与缓存中或者硬盘中,在硬盘中的是一些文本文件,当你访问该网站时,就会读取对应的网站的 cookie 信息,cookie 有效地提升了用户体验,一般来说,一旦将 cookie 保存在计算机上,则只有创建该 cookie 的网站才能读取它。

四行代码实现自动生成cookie

from urllib import request,parse
from http import cookiejar


#生成步骤
cookie = cookiejar.CookieJar()

#cookie管理器
processor = request.HTTPCookieProcessor()

#http/https请求管理器
http_handler = request.HTTPHandler()
https_handler = request.HTTPSHandler()

##创建一个人浏览器对象
opener = request.build_opener(http_handler,https_handler,processor)

模拟登陆

#登录
def login():
    url = 'http://www.renren.com/PLogin.do'
    data = {
        'email':'###',#自己的账号
        'password':'##3'#自己的登录密码
    }
    data_str = parse.urlencode(data)
    headers = {
        'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'
    }
    req = request.Request(url=url,headers=headers,data=bytes(data_str,encoding='utf-8'))

    #发起请求
    response = opener.open(req)

    getHome()

    #获取首页:
def getHome():
    url = 'http://www.renren.com/969835305/profile'

    content = opener.open(url).read().decode('utf-8')

    #保存
    with open('renrenlogin.html','w',encoding='utf-8')as f :
        f.write(content)

if __name__ == '__main__':
    login()

urllib这个库的使用还是比较简单的,对于刚接触爬虫的小伙伴来说容易理解,网上还有很多教程,可以模仿着学习,练习一下,如果有什么不清楚的地方,可以留言告诉我,我很乐意帮您解答。

以上,加油吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

成都—大数据开发工程师—杨洋

你的打赏是我创作的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值