一些概念与内置urllib的使用

几个概念

  • get请求
    查询参数会直接在url显示出来
    在请求后不会对服务器资源产生影响
  • post请求
    查询参数不会显示在url地址之上的
    在请求后会对服务器资源产生影响
  • url 全球统一资源定位符
https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%B9%3A%E4%B8%AD%E7%BE%8E%E5%85%B3%E7%B3%BB%E4%BA%89%E5%8F%96%E9%87%8D%E5%90%AF%E5%AF%B9%E8%AF%9D&rsv_idx=2&tn=baiduhome_pg&usm=2&ie=utf-8&rsv_cq=csdn&rsv_dl=0_right_fyb_pchot_20811_01&rsf=c9a1639423ea9690341c6aeae54731a0_1_10_1&rqid=d968f17f0001c1b3
https : 网络协议
www.baidu.com :主机名 省略了端口 443
s?wd=%E4%B8%AD%E6%96%B9%3A%E4%B8%AD%E7%BE%8E%E5%85%B3%E7%B3%BB%E4%BA%89%E5%8F%96%E9%87%8D%E5%90%AF%E5%AF%B9%E8%AF%9D&rsv_idx=2&tn=baiduhome_pg&usm=2&ie=utf-8&rsv_cq=csdn&rsv_dl=0_right_fyb_pchot_20811_01&rsf=c9a1639423ea9690341c6aeae54731a0_1_10_1&rqid=d968f17f0001c1b3
访问资源的路径
anchor : 锚点 资源定位标志
浏览器去请求服务器资源的时候除了数字英文符号之外其他全部会转化为十六进制百分号
User-Agent 用户代理 记录了用户的操作系统、浏览器等,为了让用户更好地获取Html页面效果
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Gecko 内核(火狐最先推出)
Referer当前请求是从哪一个url过来的,一般也可以作为一个反爬的方式
  • 状态码
    • 200 请求成功
    • 301 永久重定向 www.360buy.com / www.jd.com
    • 302 临时重定向 https://www.zhihu.com / https://www.zhihu.com/signin?next=%2F
    • 404 请求失败(服务器无法根据客户端的请求找到资源(网页))
    • 500 服务器内部请求
  • 开发者工具介绍
    • Elemants 元素 网页源代码,可以在里面提取和分析数据,但是有些数据是经过处理的并不准确
    • Consule 控制台(打印信息)
    • Sources 信息来源(整个网站加载的文件)
    • Network 网络工作(信息抓包) 可以看到很多的网络请求
      在这里插入图片描述

爬虫网络请求模块

  • python内置的抓包工具——urllib

  • 使用原因:

    • 1.有些比较老的爬虫项目用的就是这个
    • 2.有的时候就是爬取一些数据的时候需要urllib来配合requests来使用
    • 3.先将内置的了解清楚
    • 4.urllib在某些方面作用还是比较强大的
  • urllib.request模块的使用

    • urllib.request.urlopen(‘网址’)作用:向网站发起一个请求并获得响应
    • 字节流 = response.read() 读取出的数据是以字节的形式出现的
    import urllib.request
    url = 'https://www.baidu.com'
    resp = urllib.request.urlopen(url)
    print(resp.response.read())
    # b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>\r\n</body>\r\n</html>'
    
    • 字符串 = response.read().decode(‘utf-8’) 读取出的数据是以字符串的形式出现的
    import urllib.request
    url = 'https://www.baidu.com'
    resp = urllib.request.urlopen(url)
    res = resp.read().decode('utf-8')
    print(res)
    结果:
    <html>
    <head>
    	<script>
    		location.replace(location.href.replace("https://","http://"));
    	</script>
    </head>
    <body>
    	<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
    </body>
    </html>
    
    • urllib.request.Request(‘网址’,headers=‘字典’) 支持重构User-Agent 将User-Agent赋予在一个字典当中
      urlopen()不支持重构User-Agent
    import urllib.request
    url = 'https://www.baidu.com'
    hea = {
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.57'
    }
    resp = urllib.request.Request(url, headers = hea)
    req = urllib.request.urlopen(resp)
    res = req.read().decode('utf-8')
    print(res)
    
  • urllib.parse模块的使用

    • urlencode(‘字典’)。我们在向网址发送请求时代码中不能出现未注释的汉字,网址中的关键词部分是由十六进制和符号组成的,如果我们想要使用汉字来转化成十六进制编码可以使用urlencode(),注意括号里一定要是字典。
    import urllib.parse
    wb = {'wb':'徐霞客'}
    wbi = urllib.parse.urlencode(wb)
    print(wbi) 
    
    • quote(‘字符串’)。quote同样是中文转换工具,只不过转换的是字符串
    import urllib.parse
    key = '徐霞客'
    wb = urllib.parse.quote(key)
    print(wb)
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值