当前位置: 首页 > news >正文

一 初识爬虫

一 爬虫和python

1a6f539c0a844ccf99ce4215b664b672.png


二 爬虫的合法性

1c7046f36f3745ce89ae8f03d9609a78.png


三 爬虫的介绍

a3fc2fed14d74a6da8e69ac795268ad8.png 通过程序去访问网站,网站肯定希望用户来访问网站,而不是程序来访问,可以使用一些技术手段。设置障碍。

2a7aab13cc3f4ddeaf75cd9f58a27b1e.png

 越过障碍。

fb455175b8e84ea1ae422a2b458555f5.png

8b6fb8e5369a43588681ba9681630be7.png

 


四 爬虫示例

需求:用程序模拟浏览器。输入一个网址。从该网址中获取到资源或者内容。

请求:就是输入一个网址回车后就是请求。

17e906e676944f5782c522800bfdc5e0.png

85594a7dbdd94e85a747beabe3b61843.png 75cd0316402c4a3089510802c6cf8bda.png

a4c53a6261f04a46862d87fbfbe1d9e2.png

在浏览器输入百度网址后,会找到百度的服务器,百度服务器会返回给浏览器一堆 html ,然后浏览器把html代码运行成界面。


五 web请求全过程解析

436b52a99aec435784c9cb6455740471.jpg


六 HTTP协议

表示这个URL地址在数据传输的时候遵循http协议。

什么是协议

两个电脑进行数据传输的时候要遵守的协议,我给你发的数据格式是怎样的,你收到的时候就有规定。解析数据有规则。

因为计算机传输的时候就是一堆0和1,为了数据方便看就要约定好前面多少位数什么,后多少位是什么。

ed93dfd66cb0458296f98d2b47e75ef7.png

超文本传输,传输的是超文本的东西,看到的HTML代码就是超文本,HTML叫超文本标记语言,这个语言写出的叫超文本。

就是http协议传输的是网站的页面源代码。

请求和响应得到的数据格式不一样。

5cfeec03e30748d0bee07146e6146441.png

请求方式:比如 get 。常见的是 get 和 post 。

一般查询东西用get,显式提交,想修改数据的时候,对服务器里面的数据做更改,上传东西用post,隐式提交。

请求头:服务器需要知道你当前这个请求是从哪里来的,你发出请求的浏览器对返回的数据有什么要求,还有一些反爬的内容。和数据没关系。

请求体:放请求的参数。(周杰伦)

4f7a3e5f42d84ee489f65de1a568c97c.jpg

cb5a5541093a42a0ad68f2545b76094e.png状态码:这次请求是否成功,要告诉结果。200:成功,404:丢失 ,500服务器报错,百度机房炸了,302:请求成功了但是真正想要的内容要去另一个地址,重定向。

响应头:放一些客户端可能要用到的信息,比如cookie,数据加密,密钥。

8cc5fea98ed7499db98c9c2983ff00cf.png

18b688cbf20c48adac78f85210d9e382.png

2e90bb6d25624babbddd45f6a66b4ccc.png

30c4d50a9b0845dc8db5116785319c42.png

反爬手段一般都是在请求头和相应头。不同网站这两个头可能不一样。


七 requests模块入门

简化获取页面源代码的过程。

前面案例:from urllib.request import urlopen

用 urlopen 去打开网址。request可以进一步简化步骤。

这个模块不是Python自带的,要安装。

pip install requests,最好在 pycharm 里的 terminal 装。

在浏览器地址栏里面输入的URL都是使用get方式提交。

008dec1008fd45efaf89044c83dfb63e.png

表示成功发送请求和成功收到响应了。

d849c74abaa7484ab577e3dbbc9ec6fd.jpg

f9f66664130447a589ee9f839b523f2a.png 被抓到了,所以要让这个爬虫程序伪装成浏览器。

3113b925b30e499ea0e304b58be9315f.png

682b641c7a9842ef9eb4482717a14c64.png

处理了一个小反爬。

如果默认 requests.get(url) 有一个自动化程序的 user agent ,伪装成浏览器就是加上请求头设备。

612b839e76404a5d8fb8ecf8dc584a72.png

案例演示:获取百度翻译的结果。

F12,然后进入百度翻译界面,再清空network记录。

在翻译框里面输入一个单词,英文输入法。

9c494e515f78463191c17db0502b2ec9.png

f67ada4327a648d0ab35e460d5922191.png

请求方式是post,最下面有一个Form Data,拉开后有个 kw:dog。(没有就是在payload里面)

用post发送请求,发送到参数就是 Form Data 。和get请求传参方式不一样。get发送到参数是query string parameter。重新整理了发送的参数。

get请求参数直接拼接在URL里面,https://sogou.com/web?query=周杰伦。?后面是参数。

post不能用这种方式。

三个sug分给是 d do dog

f66a062f744145379234399b075e5708.png

16a5c6ccf7b747ea9408b30919f1045a.png

9fb40f0ad77943e1b89bec46db78c842.png

4417fedf1839482488c664a775996dcb.png

案例演示:获取百度翻译的结果。

8b10ca8fb1d140259ed874f8ed63bcc3.png

739ec1e6e2f54e9ba5b144c240f33d0c.jpg

 b7f7d71482b346f0a6de3f570520c5b9.png

2cfb3fc9042a44f2bf354b59045e7777.png

要依次查看到底是什么原因。

1.useragent

默认的useragent是

e524afbea297413ebd887d9014e3160c.png

 到浏览器中复制过来改。

25294a28248445deb01e776d470f2ae5.png

 88a7d6bf059f473f9f7c3828c59e65a6.png

每次滚动加载这个start都会递增。

在爬完数据后要resp.close()

如果不关访问的次数过多后再去访问就会报错,你请求的地方被堵死。

创建,写入,关闭三件套

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分享7款宝藏APP,用途多样,值得一试
  • centos7.9系统安装cloudpods并使用ceph存储(二)
  • kubernetes培训
  • Qt之QSS的介绍以及加载QSS
  • 阿里云私有镜像仓库配置及使用
  • 双重映射+逆向并查集+恢复
  • Spring Cloud Eureka与Kubernetes的集成:服务发现的混合方案
  • 开放式耳机哪个品牌实用?南卡、漫步者、小米 三款爆火单品横评
  • 自动化运维:Ansible、Puppet、Chef工具对比与实战
  • 正确申报化妆品数量技巧 | 国际物流服务贸易 | 箱讯科技
  • 电路笔记(PCB): KICAD 导入 JLC嘉立创项目
  • 【js】箭头函数和普通函数在this指向的区别
  • Docker快速上手
  • Linux的log日志排查
  • 51单片机-LED闪烁
  • [LeetCode] Wiggle Sort
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Android框架之Volley
  • Angular 4.x 动态创建组件
  • Angularjs之国际化
  • CentOS7 安装JDK
  • Invalidate和postInvalidate的区别
  • JavaScript服务器推送技术之 WebSocket
  • k个最大的数及变种小结
  • Linux各目录及每个目录的详细介绍
  • MYSQL 的 IF 函数
  • python3 使用 asyncio 代替线程
  • Theano - 导数
  • 初识 beanstalkd
  • 动态规划入门(以爬楼梯为例)
  • 深入 Nginx 之配置篇
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 微服务核心架构梳理
  • 正则表达式小结
  • 智能合约开发环境搭建及Hello World合约
  • No resource identifier found for attribute,RxJava之zip操作符
  • Nginx实现动静分离
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #1014 : Trie树
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • ()、[]、{}、(())、[[]]命令替换
  • (07)Hive——窗口函数详解
  • (20050108)又读《平凡的世界》
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net 调用海康SDK以及常见的坑解释
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET开源项目介绍及资源推荐:数据持久层
  • ?php echo ?,?php echo Hello world!;?
  • @JSONField或@JsonProperty注解使用