• 爬虫第二节浏览器模拟


    # 浏览器模拟---Headers属性
    # 有时候,我们无法爬取一下网页,会出现403错误,应为这些网页为了防止别人恶意采集其信息
    # 所以进行了一些反爬虫的设置
    # 所以想进行反爬机制可设置一些Header信息,模拟浏览器去进行访问网站
    # 首先用之前的方法进行爬取
    # import urllib.request
    #
    # url = "https://movie.douban.com"
    # file = urllib.request.urlopen(url)
    # print(file)
    #故会出现的错误:urllib.error.HTTPError: HTTP Error 418:

    # 接下来我们讲解两种让爬虫模拟成了浏览器访问网页的设置方法
    # 方法1:使用build_opener()修改报头
    # 由于URLopen()不支持一些http的高级功能所以我们如果要修改报头,
    # 可以使用urlib.request.build_opener()进行,
    import urllib.request

    url = "https://movie.douban.com"
    headers = ("User-Agent",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    data = opener.open(url).read()
    print(data)
    # 对上述代码进行解释:首先进行定义一个变量url存储要爬取的网站,然后在在定义一个变量
    # headers存储对应的User-agent信息,定义的格式为("User-Agent",具体信息)
    # 然后我们需要使用urllib.request.build_opener()创建自定义的opener对象并赋给变量opener
    # 接下来设置opener对象的addheaders 设置对应的头信息,
    # 设置格式为“opener对象名.addheaders=[头信息]
    # 使用opener对象的.open()方法打开对应的网址了,使用格式是opener对象名.open(url地址)。
    # 打开对应网址后,再使用read()方法读取对应数据,并赋给data变量


    # 然后进行写入文件
    fhandle=open("G:/百度网盘/精通Python网络爬虫源码/书中源码/2.html", "wb")
    fhandle.write(data)
    fhandle.close()



    # 方法二,使用add_header()添加报头,还有可以使用urllib.request.Request()下的add_header()
    # 实现浏览器模拟器
    import urllib.request

    url = "http://blog.csdn.net/weiwei_pig/article/details/51178226"
    req = urllib.request.Request(url)
    req.add_header('User-Agent',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0')
    data = urllib.request.urlopen(req).read()
    print(data)

    # 设置要爬取的网址,然后使用urllib.request.Request(url)创建一个Request对象并赋给变量req
    # 创建对象的格式为:urllib.request.Request(url地址)
    # 随后,使用add_header()方法添加对应的报头信息,格式为:Request对象名.add_header(字段名,字段值)
    # 设置好报头,然后我们使用urlopen()打开该Request对象即可打开对应网址,所以此时我们使用data=urllib.request.urlopen(req)。read()
    # 打开对应网址并读取了网页内容,并赋给了data变量
  • 相关阅读:
    RabbitMQ之六种队列模式
    面试资料
    位掩码的介绍与使用(小白鼠试毒问题)
    递归函数的写法(以strcpy函数为例)
    查找算法简介及实现
    八大排序算法概述及实现
    快速排序算法(一)
    最大(小)堆和堆排序简介
    满二叉树各种节点数目的计算
    LPSTR、LPCSTR、LPWSTR、LPCWSTR、LPTSTR、LPCTSTR的来源及意义
  • 原文地址:https://www.cnblogs.com/kwkk978113/p/12870841.html
Copyright © 2020-2023  润新知