• Python做简单爬虫(urllib.request怎么抓取https以及伪装浏览器访问的方法)


    一:抓取简单的页面:

    用Python来做爬虫抓取网站这个功能很强大,今天试着抓取了一下百度的首页,很成功,来看一下步骤吧

    首先需要准备工具:

    1.python:自己比较喜欢用新的东西,所以用的是Python3.6,python下载地址:https://www.python.org/

    2.开发工具:用Python的编译器即可(小巧),不过自己由于之前一直做得前端,使用的webstrom,所以选择JetBrains 公司的PyCharm,下载地址:https://www.jetbrains.com/zh/pycharm/specials/pycharm/pycharm.html?utm_source=baidu&utm_medium=cpc&utm_campaign=cn-bai-pro-pycharm-ex-pc&utm_content=pycharm-download&utm_term=pycharm%E4%B8%8B%E8%BD%BD

    3.Fiddler -- 网页请求监控工具,我们可以使用它来了解用户触发网页请求后发生的详细步骤;(自行百度下载)

    了解Python中urllib库

    Python2系列使用的是urllib2,Python3后将其全部整合为urllib,

    在2中:

    urllib2.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
    
    urllib2.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
    

     3中是

    urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
    
    urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
    
     #这个函数看起来接受很多的参数啊,不过很多我们平时不会用到,用到的url居多。
    

     很明显,我用后者

     简单爬虫代码

     

    #encoding:UTF-8
    import urllib.request
    
    url = "https://www.douban.com/ "
    data = urllib.request.urlopen(url).read()
    data = data.decode('UTF-8')
    print(data)

    效果如下:

    二:抓取需要伪装浏览器的网站

    但是一个小小的百度首页怎能满足我,于是我又想到了一些需要需要伪装浏览器才能抓取的网站,比如豆瓣,

    1.伪装浏览器:

    对于一些需要登录的网站,如果不是从浏览器发出的请求,则得不到响应。所以,我们需要将爬虫程序发出的请求伪装成浏览器正规军。
    具体实现:自定义网页请求报头。

    2.、使用Fiddler查看请求和响应报头

    打开工具Fiddler,然后再浏览器访问“https://www.douban.com/”,在Fiddler左侧访问记录中,找到“200 HTTPS www.douban.com”这一条,点击查看其对应的请求和响应报头具体内容:

     3.进行访问:

    import urllib.request
    
    import ssl
    
    ssl._create_default_https_context = ssl._create_stdlib_context
    
    # 定义保存函数
    def saveFile(data):
        path = "F:\pachong\02_douban.out"
        f = open(path, 'wb')
        f.write(data)
        f.close()
    
    
    # 网址
    url = "https://www.douban.com/"
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                             'Chrome/51.0.2704.63 Safari/537.36'}
    req = urllib.request.Request(url=url, headers=headers)
    
    res = urllib.request.urlopen(req)
    
    data = res.read()
    
    # 也可以把爬取的内容保存到文件中
    saveFile(data)
    
    data = data.decode('utf-8')
    # 打印抓取的内容
    print(data)
    
    # 打印爬取网页的各类信息
    print(type(res))
    print(res.geturl())
    print(res.info())
    print(res.getcode()) 

    我们来看这段代码:

    import ssl
    
    ssl._create_default_https_context = ssl._create_stdlib_context

    这句是为了能获取到https而插入的代码,没他没法获取https

    输出结果:

  • 相关阅读:
    pandas 的pd.cut()数据分箱
    pandas 的groupby()
    pandas 的DataFrame.apply()
    天池二手车_特征工程
    numpy简单的笔记
    python 面向对象编程的@property
    mybatis 复杂sql语句
    mybatis Lombok
    mybatis 获取 sqlSession
    mybatis @Param 注解
  • 原文地址:https://www.cnblogs.com/mmykdbc/p/7575074.html
Copyright © 2020-2023  润新知