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

爬虫入门--了解相关工具

目录

1.爬虫与python

2.第一个爬虫

3.web请求的全过程 

3.1服务器渲染 

3.2前端JS渲染 

4.浏览器工具 

4.1Elements

4.2Console 

4.3Source

 4.4network(重点)

5.小结


1.爬虫与python

首先我们要知道,爬虫一定要用Python么? 非也~ 用Java也行, C也可以,请各位记住,编程语言只是工具,抓到数据是你的目的,用什么工具去达到你的目的都是可以的,和吃饭一样, 可以用叉子也可以用筷子, 最终的结果都是你能吃到饭,那为什么大多数人喜欢用Python呢? 答案: 因为Python写爬虫简单,不理解? 问: 为什么吃米饭不用刀叉? 用筷子? 因为简单! 好用!

而Python是众多编程语言中, 小白上手最快, 语法最简单,而且如果要成为一名python全栈工程师,爬虫这项技能是有必要掌握的,而python有非常多的关于爬虫能用到的第三方支持库. 说直白点儿. 就是你用筷子吃饭, 我还附送你一个佣人. 帮你吃! 这样吃的是不是更爽了. 更容易了~


2.第一个爬虫

爬虫就是我们通过我们写的程序去抓取互联网上的数据资源. 比如, 此时我需要百度的资源. 在不考虑爬虫的情况下, 我们肯定是打开浏览器, 然后输入百度的网址, 紧接着, 我们就能在浏览器上看到百度的内容了. 那换成爬虫呢? 其实道理是一样的. 只不过, 我们需要用代码来模拟一个浏览器, 然后同样的输入百度的网址. 那么我们的程序应该也能拿到百度的内容. 对吧~

在python中, 我们可以直接用urllib模块来完成对浏览器的模拟工作~, 直接上代码

from urllib.request import urlopenresp = urlopen("http://www.baidu.com")  # 打开 百度
print(resp.read().decode("utf-8"))  # 打印 抓取到的内容

我们可以把抓取到的html内容全部写入到文件中, 然后和原版的百度进行对比, 看看是否一致  

from urllib.request import urlopenresp = urlopen("http://www.baidu.com")  # 打开 百度# print(resp.read().decode("utf-8"))  # 打印 抓取到的内容with open("baidu.html", mode="w", encoding="utf-8") as f:  # 创建文件f.write(resp.read().decode("utf-8"))  # 保存在文件中


3.web请求的全过程 

大家可以去补充一些前端的知识,学习爬虫我们要求的不多,只要能过看懂就可以,话不多说,直接上图~

 接下来就是一个比较重要的事情了. 所有的数据都在页面源代码里么?  

💡非也~ 完整的页面展示是通过将源代码渲染得到的,而常见的页面渲染有两种

3.1服务器渲染 

 服务器渲染,你需要的数据直接在页面源代码中就能搜到:

这个最容易理解,也是最简单的,含义呢就是我们在请求到服务器的时候,服务器直接把数据全部写入到html中,我们浏览器就能直接拿到带有数据的html内容,比如:

📖 由于数据是直接写在html中的, 所以我们能看到的数据都在页面源代码中能找的到的.

这种网页一般都相对比较容易就能抓取到页面内容

3.2前端JS渲染 

这种就稍显麻烦了,这种机制一般是第一次请求服务器返回一堆HTML框架结构,然后再次请求到真正保存数据的服务器,由这个服务器返回数据,最后在浏览器上对数据进行加载,就像这样:  

大多数页面这样做的好处就是可以缓解服务器的压力,就像我们平常访问一些购物页面,都是直奔主题,直接搜索自己想要的东西,虽然JS渲染无法直接获得我们爬取,我们还可以通过浏览器的调试工具。

📖那我们下一步介绍浏览器开发者工具,注意是开发者工具哦,功能也很强大,是我们以后学习的主要工具,当然还有pycharm~


4.浏览器工具 

Chrome是一款非常优秀的浏览器. 不仅仅体现在用户使用上. 对于我们开发人员而言也是非常非常好用的.

对于一名爬虫工程师而言. 浏览器是最能直观的看到网页情况以及网页加载内容的地方. 我们可以按下F12来查看一些普通用户很少能使用到的工具.

其中,最重要的Elements,Console,Sources,Network。

4.1Elements

Elements是我们实时的网页内容情况,注意, 很多兄弟尤其到了后期,非常容易混淆Elements以及页面源代码之间的关系,这里我们重点强调一下:

🏷️🏷️

  1. 页面源代码是执行js脚本以及用户操作之前的服务器返回给我们最原始的内容

  2. Elements中看到的内容是js脚本以及用户操作之后的当时的页面显示效果

  3. 一个是写好的,一个是实时的

4.2Console 

第二个窗口,Console是用来查看程序员留下的一些打印内容,以及日志内容的,我们可以在这里输入一些js代码自动执行。

4.3Source

第三个窗口, Source, 这里能看到该网页打开时加载的所有内容. 包括页面源代码. 脚本. 样式, 图片等等全部内容.

 4.4network(重点)

第四个窗口, Network, 我们一般习惯称呼它为抓包工具. 在这里, 我们能看到当前网页加载的所有网路网络请求, 以及请求的详细内容. 这一点对我们爬虫来说至关重要.

  其他更加具体的内容. 随着咱们学习的展开. 会逐一进行讲解.


5.小结

  1. 学习了爬虫的主要环境,并用代码模拟浏览器制作的百度页面
  2. 掌握浏览器开发者工具

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • 密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(1)
  • Golang | Leetcode Golang题解之第328题奇偶链表
  • 汽车测试,引领国际
  • [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测
  • C语言实现游戏2048(超详细!!!超易懂!!!)
  • 中职云计算实训室
  • 《密码编码学与网络安全原理与实践》第三章 传统加密技术
  • Tomcat启动控制台乱码解决方案
  • 【Pytorch实用教程】nn.Conv2d的详细介绍
  • 【漏洞复现】maxView Storage Manager 远程代码执行漏洞
  • 51单片机—智能垃圾桶(定时器)
  • Linux磁盘管理_文件系统
  • MySQL1 DDL数据定义语言
  • Linux 安装指南
  • C++类的相互关联
  • conda常用的命令
  • ES6 学习笔记(一)let,const和解构赋值
  • Golang-长连接-状态推送
  • Java 多线程编程之:notify 和 wait 用法
  • js数组之filter
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • python docx文档转html页面
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • webpack入门学习手记(二)
  • 爬虫模拟登陆 SegmentFault
  • 前端面试总结(at, md)
  • 使用putty远程连接linux
  • 一、python与pycharm的安装
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • raise 与 raise ... from 的区别
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​水经微图Web1.5.0版即将上线
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # centos7下FFmpeg环境部署记录
  • $nextTick的使用场景介绍
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (办公)springboot配置aop处理请求.
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十三)Maven插件解析运行机制
  • (四)鸿鹄云架构一服务注册中心
  • (一)SvelteKit教程:hello world
  • .equals()到底是什么意思?
  • .Net Web项目创建比较不错的参考文章
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [1] 平面(Plane)图形的生成算法
  • [C/C++]数据结构 栈和队列()
  • [DL]深度学习_Feature Pyramid Network
  • [iOS]iOS获取设备信息经常用法
  • [iOS]-NSTimer与循环引用的理解
  • [Java] 图说 注解