网络爬虫
D:模拟客户端(一般指浏览器)发送网络请求,获取对应的响应,一般按照一定的规则,自动的抓取互联网信息的程序。
E:数据采集,软件测试,其他用途(抢票,刷票,短信轰炸等)
分类:
①通用爬虫:通常指搜索引擎和大型web服务提供商的爬虫
②聚焦爬虫:针对特定网站,获取所需数据的爬虫,又分为三大类
1.累计式爬虫:从开始到结束不断爬取数据,过程会进行去重操作
2.增量式爬虫:已下载网页,爬取网页变化数据,或者只爬取新生成的网页的爬虫
3.深网爬虫:不能通过静态链接获取、隐藏在搜索表单后,只有用户登录或提交数据才能获取数据的爬虫。
通用搜索引擎的局限性:
①·所返回的网页内容90%无用
②中文检索引擎理解困难
③信息占有量和覆盖率有局限
④以关键字搜索为主,图片,数据库,音频,多媒体等不太支持
⑤搜索的社区化和个性化不好,没有考虑人的地域,性别,年龄的差别
⑥抓取动态网页效果不好
ROBOTS协议
D:“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
存在位置:robots.txt文件应该放置在网站根目录下
聚焦爬虫原理
C:/Users/Jowell520home/AppData/Local/YNote/data/m13560452744@163.com/9aa6e623e7e0410f9f49ed38002a2c21/clipboard.png
HTTP和HTTPS的区别:
HTTPS相对于HTTP在应用层(HTTP)和传输层(TCP)加了一个SSL(安全套接字层),HTTPS比HTTP更安全,但性能更差
Get请求与Post请求的区别:
请求方法 | GET | POST |
作用 | 用来请求资源 | 用来传输实体数据 |
传输数据大小 | 小,2M | 大 |
实体数据存放位置 | url | 请求体 |
HTTP常见请求头:
1. Host (主机和端口号)
2. Connection (链接类型)
3. Upgrade-Insecure-Requests (升级为HTTPS请求)
4. User-Agent (用户代理) 服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
5. Accept (传输文件类型)
6. Referer 页面跳转处,从何处来到当前页面,可用于防爬和防盗链
7. Accept-Encoding 浏览器支持的编码类型,主要的编码格式就是压缩格式gzip compress deflate
8. Cookies: 用于进行状态保持,通常也可用于识别用户身份
9. x-requested-with : XMLHttpRequest 是Ajax 异步请求
Reqests
D:是用python编写的,基于urllib封装的开源http库,提高我们的效率
E:发送网络请求,获取返回的响应数据
U:①安装requests包并导包:pip3 install requests import requests
②通过发请求获取响应对象:response =requests.get(url)
③response的常用方法:
1.response.status_code 获取状态码
2.response.headers 获取响应头
3.response.request 获取响应对应的请求
4.response.text 获取str类型的响应,推测文本编码,可能出现乱码
5.respones.content 获取bytes类型的响应,可decode()解码获取字符串
注意点:
①请求需带上headers:模拟浏览器,获取和浏览器一致的内容
response =request.get(url,headers =headers) --------headers是一个字典形式,一般UA必带
②带参数的请求:params=params作为参数去发请求,也是一个字典形式。
③发送post请求:data =data 作为参数去发请求,也是一个字典形式
IP代理
D:即代理服务器,其功能主要就是代理网络用户去获取网络信息,形象的说就是网络信息的中转站
E:模拟多个用户请求,非同一个用户,防止因为ip发送请求过多而被反爬;防止我们的真实地址被泄露,防止被追究
U:注意:键必须根据代理的实际类型进行设置
proxies = {
"http": "http://12.34.56.79:9527",
"https": "https://12.34.56.79:9527",
}
requests.get(url, proxies=proxies)
Cookie和Session
带上cookie、session好处:很多网站必须登录之后(或者获取某种权限之后)才能请求到相关数据
带上cookie、session的弊端:一套cookie和session往往和一个用户对应.请求太快,请求次数太多,容易被服务器识别为爬虫。从而是账号收到损害。
使用建议:
1.不需要cookie的时候尽量不去使用cookie
2.为了获取登录之后的页面,我们必须发送带有cookies的请求,此时为了确保账号安全应该尽量降低数据采集速度
U:Cookie使用:请求头添加cookie或设置字典 cookie =cookie作为参数去发请求
Session使用:①实例化session对象:session = requests.Session()
②使用session对象发送请求:session.get(url)
requests小技巧
1. cookiesjar与字典之间的相互转换
reqeusts.utils.dict_from_cookiejar 把cookiejar对象转化为字典格式的cookies
requests.utils.cookiejar_from_dict 把字典格式的cookies转换成cookiejar对象
2. 请求 SSL证书验证
使用场景:Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。SSL 验证默认是开启的,如果证书验证失败,Requests 会抛出 SSLError
使用方式: response = requests.get("https://www.12306.cn/mormhweb/ ", verify=False)
3. 设置超时
使用场景:有些站点或者代理反应慢,严重降低效率,这个时候可以设置超时
使用方式:response = requests.get(url,timeout=10)