博客
关于我
Request模块实战02 --- 实现简易网页采集器(UA伪装反爬策略、处理有参数url)
阅读量:327 次
发布时间:2019-03-04

本文共 2031 字,大约阅读时间需要 6 分钟。

Request模块实战02 — 实现简易网页采集器(UA伪装反爬策略、处理有参数url)


目录:

      


一、反爬机制

对于爬虫用户来说,网站的反爬机制可以说是他们的头号敌人。反爬机制是为了防止爬虫爬取数据过于频繁,给服务器造成过重的负担导致服务器崩溃而设置的机制,它其实也有几种不同的方式:

  1. 通过UA机制识别爬虫

UA的全称是User Agent它是请求浏览器的身份标志,很多网站使用它来作为识别爬虫的标志,如果访问请求的头部中没有带UA那么就会被判定为爬虫,但由于这种要针对这种反爬虫机制十分容易,即随机UA,所以这种反爬机制使用的很少。

  1. 通过访问频率识别爬虫

爬虫为了保证效率,往往会在很短的时间内多次访问目标网站,所以可以通过单个IP访问的频率来判断是否为爬虫。并且,这种反爬方式比较难以被反反爬机制反制,只能通过更换代理IP来保证效率,如飞鱼ip代理。

  1. 通过Cookie和验证码识别爬虫

Cookie就是指会员制的账号密码登陆验证,这就可以通过限制单账号抓取频率来限制爬虫抓取,而验证码完全是随机的,爬虫脚本无法正确识别,同样可以限制爬虫程序。


二、UA伪装

  • User-Agent:

请求载体身份标识,通过浏览器发起的请求,请求载体为浏览器,则该请求的User-Agent为浏览器的身份标识,如果使用爬虫程序发起的请求,则该请求的载体为爬虫程序,则该请求的User-Agent为爬虫程序的身份标识服务器可以通过该值来判断发起请求的是浏览器还是爬虫程序

在这里插入图片描述
通过正常的浏览页面我们可以获得允许正常访问的User-Agent。( 网页中按F12

  • 反爬机制:

某些门户网站会对访问该网站的请求中的User-Agent进行捕获和判断,如果该请求的UA为爬虫程序,那么就拒绝该提供请求数据。

  • 反爬策略

反爬取策略,让爬虫请求对应的url身份标识伪装成某一款浏览器


三、网页采集器

网页采集器,简单的来说就是利用爬虫技术,实现定向的网页信息爬取程序。个人理解为这里就是将程序看成是一个工具,类似转换器那种,使用代码实现与网络数据的转换。


四、代码实现

# -*- coding: utf-8#  @Time    : 2020/12/7 23:55#  @Author  : ZYX#  @File    : request实战之网页采集器.py# @software: PyCharmimport requestsif __name__ == '__main__':    # UA伪装,将对应的user-agent封装到一个字典中    # 对应着谷歌浏览器的一个身份标识    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.3776.400 QQBrowser/10.6.4212.400'    }    # 1.指定url    url = 'https://www.sogou.com/web?'    #  处理url携带的参数:封装到字典中    kw = input('enter a word:')    param={           'query':kw    }    # 2.发送请求    #   对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数    response = requests.get(url=url,params=param,headers=headers)    # 3.获得相应数据    page_data = response.text    print(page_data)    # 4.持久化数据存储    fileName = kw+'.html'    with open('./data/'+fileName,'w',encoding='utf-8') as fp:        fp.write(page_data)    print(fileName+'保存成功,爬取数据结束!!!')

解析:

  • UA伪装,将对应的user-agent封装到一个字典中,对应着谷歌浏览器的一个身份标识,通过该标识浏览器会将爬虫当做是某一款浏览器

    在这里插入图片描述

  • 指定url,并处理url携带的参数:封装到字典中。

  • 在这里插入图片描述

  • 发送请求,对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数 — UA伪装请求参数queryurl网址

    在这里插入图片描述

  • 获得相应数据,并将其持久化数据存储。简单的来说就是将爬取的结果以文件的形式保存

    在这里插入图片描述

  • 运行程序,控制台输入参数,等待爬取结果

    在这里插入图片描述

  • 打开爬取结果文件,并在网页中打开测试。

    在这里插入图片描述
    在这里插入图片描述
    至此爬取成功完毕~
    在这里插入图片描述


转载地址:http://fweq.baihongyu.com/

你可能感兴趣的文章
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
Nhibernate的第一个实例
查看>>
nid修改oracle11gR2数据库名
查看>>
NIFI1.21.0/NIFI1.22.0/NIFI1.24.0/NIFI1.26.0_2024-06-11最新版本安装_采用HTTP方式_搭建集群_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_插入时如果目标表中已存在该数据则自动改为更新数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0058
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0最新版本安装_配置使用HTTP登录_默认是用HTTPS登录的_Https登录需要输入用户名密码_HTTP不需要---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>