ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【Python从零到壹】python爬虫系列-网络请求

2021-04-05 22:58:56  阅读:273  来源: 互联网

标签:请求 Python resp request 代理 urllib python 零到 url


学习了之前的基础和爬虫基础之后,我们要开始学习网络请求了。

文章目录


先来看看urllib

urllib的介绍

urllib是Python自带的标准库中用于网络请求的库,无需安装,直接引用即可。
主要用来做爬虫开发,API数据获取和测试中使用。

urllib库的四大模块:

  • urllib.request: 用于打开和读取url
  • urllib.error : 包含提出的例外,urllib.request
  • urllib.parse:用于解析url
  • urllib.robotparser:用于解析robots.txt

案例

# 作者:互联网老辛
# 开发时间:2021/4/5/0005 8:23
import urllib.parse
kw={'wd':"互联网老辛"}
result=urllib.parse.urlencode(kw)
print(result)
#解码
res=urllib.parse.unquote(result)
print(res)

在这里插入图片描述
浏览器中会把互联网老辛,改成非中文的形式

我在浏览器中搜互联网老辛,然后把浏览中的复制下来:
在这里插入图片描述

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E4%BA%92%E8%81%94%E7%BD%91%E8%80%81%E8%BE%9B&fenlei=256&oq=%25E7%25BE%258E%25E5%259B%25A2&rsv_pq=aa5b8079001eec3e&rsv_t=9ed1VMqcHzdaH7l2O1E8kMBcAS8OfSAGWHaXNgUYsfoVtGNbNVzHRatL1TU&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3542&rsv_sug2=0&rsv_sug4=3542

仔细看下,加粗的部分是不是就是我们在代码中输出的wd的结果

发送请求

  • urllib.request 库
    模拟浏览器发起一个http请求,并获取请求的响应结果
  • urllib.request.urlopen 的语法格式:
    urlopen(url,data=None,[timeout]*,cafile=None,capath=None,cadefault=False,context=None

参数说明:
url: str类型的地址,也就是要访问的URL,例如https://www/baidu.com
data: 默认值为None
urlopen函数返回的是一个http.client.HTTPResponse对象

代码案例

get请求

# 作者:互联网老辛
# 开发时间:2021/4/5/0005 8:23
import urllib.request
url="http://www.geekyunwei.com/"
resp=urllib.request.urlopen(url)
html=resp.read().decode('utf-8')  #将bytes转成utf-8类型
print(html)

为什么要改成utf-8而不是gbk, 这里要看网页的检查网页源代码里是什么:
在这里插入图片描述

发送请求-Request请求

我们去爬取豆瓣

# 作者:互联网老辛
# 开发时间:2021/4/5/0005 8:23
import urllib.request

url="https://movie.douban.com/"

resp=urllib.request.urlopen(url)
print(resp)

豆瓣有反爬虫策略,会直接报418错误
在这里插入图片描述
对于这种我们需要伪装请求头:
我们找到网页中的user-Agent:

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400
# 作者:互联网老辛
# 开发时间:2021/4/5/0005 8:23
import urllib.request

url="https://movie.douban.com/"
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}

#构建请求对象
req=urllib.request.Request(url,headers=headers)
#使用urlopen打开请求
resp=urllib.request.urlopen(req)
#从响应结果中读取数据
html=resp.read().decode('utf-8')
print(html)

这样我们就用Python成功的伪装成浏览器获取到了数据

IP代理

opener的使用,构建自己的opener发送请求

# 作者:互联网老辛
# 开发时间:2021/4/5/0005 8:23
import urllib.request
url="https://www.baidu.com/"
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
#构建请求对象

req=urllib.request.Request(url,headers=headers)

opener=urllib.request.build_opener()
resp=opener.open(req)
print(resp.read().decode())

如果你不停的发送请求,他有可能给你禁止IP, 所以我们每隔一段时间就换一个IP代理。

IP代理分类:

  • 透明代理: 目标网站知道你使用了代理并且知道你的源IP地址,这种代理肯定不符合我们的初衷
  • 匿名代理: 网站知道你使用了代理,但不知道你的源ip
  • 高匿代理: 这是最保险的方式,目录网站不知道你使用了代理

ip代理的方式:
免费的: https://www.xicidaili.com/nn/
收费的: 大象代理,快代理,芝麻代理

# 作者:互联网老辛
# 开发时间:2021/4/5/0005 8:23
from urllib.request import build_opener
from urllib.request import ProxyHandler
proxy=ProxyHandler({'https':'222.184.90.241:4278'})

opener=build_opener(proxy)

url='https://www.baidu.com/'
resp=opener.open(url)
print(resp.read().decode('utf-8'))

百度其实能够做到反爬,即使是高匿代理也做不到百分百的绕过。

(待续)

标签:请求,Python,resp,request,代理,urllib,python,零到,url
来源: https://blog.csdn.net/xinshuzhan/article/details/115448326

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有