• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python爬虫系列网络请求案例详解

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

    先来看看urllib

    urllib的介绍

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

    urllib库的四大模块:

    案例

    # 作者:互联网老辛
    # 开发时间: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-8f=8rsv_bp=1rsv_idx=1tn=baiduwd=%E4%BA%92%E8%81%94%E7%BD%91%E8%80%81%E8%BE%9Bfenlei=256oq=%25E7%25BE%258E%25E5%259B%25A2rsv_pq=aa5b8079001eec3ersv_t=9ed1VMqcHzdaH7l2O1E8kMBcAS8OfSAGWHaXNgUYsfoVtGNbNVzHRatL1TUrqlang=cnrsv_enter=1rsv_dl=tbrsv_btype=tinputT=3542rsv_sug2=0rsv_sug4=3542

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

    发送请求

    模拟浏览器发起一个http请求,并获取请求的响应结果

    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代理的方式:

    免费的: 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'))

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

    使用cookie

    为什么使用cookie?

    使用cookie主要是为了解决http的无状态性。

    使用步骤:

    案例: 获取百度贴的cookie存储下来

    import urllib.request
    from http import cookiejar
    filename='cookie.txt'
    def get_cookie():
        cookie=cookiejar.MozillaCookieJar(filename)
        #创建handler对象
    
        handler=urllib.request.HTTPCookieProcessor(cookie)
        opener=urllib.request.build_opener((handler))
        #请求网址
        url='https://tieba.baidu.com/f?kw=python3fr=index'
    
        resp=opener.open(url)
        # 保存cookie
        cookie.save()
    #读取数据
    def use_cookie():
        #实例化MozillaCookieJar
        cookie=cookiejar.MozillaCookieJar()
        #加载cookie文件
        cookie.load(filename)
        print(cookie)
    if __name__=='__main--':
        use_cookie()
        #get_cookie()

    异常处理

    我们爬取一个访问不了的网站来捕获异常

    # 作者:互联网老辛
    # 开发时间:2021/4/6/0006 7:38
    
    import urllib.request
    import urllib.error
    url='https://www.google.com'
    try:
        resp=urllib.request.urlopen(url)
    except urllib.error.URLError as e:
        print(e.reason)

    可以看到捕获到了异常

    网络请求我们已经学完了,后面我们将学习几个常用的库,之后就可以进行数据的爬取了。

    到此这篇关于python爬虫系列网络请求案例详解的文章就介绍到这了,更多相关python爬虫网络请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python爬虫请求库httpx和parsel解析库的使用测评
    • 详解python requests中的post请求的参数问题
    • 快速一键生成Python爬虫请求头
    • Python3+Django get/post请求实现教程详解
    • python 实现Requests发送带cookies的请求
    • python实现三种随机请求头方式
    • Python urllib request模块发送请求实现过程解析
    • python 爬虫请求模块requests详解
    • Python Http请求json解析库用法解析
    • python 发送get请求接口详解
    • python+excel接口自动化获取token并作为请求参数进行传参操作
    • Python使用grequests并发发送请求的示例
    • Python爬虫基础讲解之请求
    上一篇:39条Python语句实现数字华容道
    下一篇:制作Python数字华容道的实现(可选择关卡)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python爬虫系列网络请求案例详解 python,爬虫,系列,网络,请求,