手把手带你入门Python爬虫(爬虫预备知识)
爬虫预备知识
一、计算机网络协议基础
一个完整的网络请求过程如下:
在浏览器输入域名后,浏览器先访问DNS服务器,DNS返回ip给浏览器,然后浏览器与web服务器建立TCP连接,浏览器就可以发送http请求,web服务器返回数据到浏览器,接下来就是浏览器解析内容的步骤。
七层网络协议:
- 应用层
Http、ftp、pop3、DNS
- 表示层
- 会话层
- 传输层
TCP、UDP
- 网络层
ICMP、IP、IDMP
- 数据链路层
ARP、RARP
- 物理层 物理传输介质
二、Html、Css、Javascript
网页三要素:Html、Css、Javascript
Html
是承载网页内容的骨骼;Css
是网页的样式;Javascript
是网页运行的脚本;
我们需要爬虫的内容一般为网页的部分HTML的内容,所以说可见即可得,只要在页面上看得到的我们就可以爬到。
浏览器的加载过程:
构建DOM树—子资源加载(加载外部的css、js、图片等外部资源)—样式渲染(css执行)
查找页面元素一般通过DOM树来查找:
Ajax 异步加载
有的数据是通过js向服务器发送请求,返回数据将数据通过js动态插入到页面的,这种方式不会刷新页面,用户体验效果好。
ajax返回的数据又可能是json格式,也可以是html页面部分。
动态网页和静态网页:
动态:数据是与后台有交互的,可以变的(ajax)
静态:数据不可变的(如果要变需要修改源代码)
动态网页体验好,局部加载,对服务器好,扩展性好
静态网页有利于SEO
GET请求 与 POST请求
GET参数包含在URL中,POST通过request body 传递参数。
- GET在浏览器回退时是无害的,而POST会再次提交请求
- GET请求只能进行url编码,而POST支持多种编码方式
- GET请求在URL中传送的参数是有长度限制的,而POST没有
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能传递敏感信息
3种content-type
-
application/x-www-form-urlencoded
POST提交数据,浏览器原生form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据。提交的数据按照key1=val1&key2=val2的方式进行编码,key和val都进行了URL转码。 -
multipart/form-data
表单上传文件。 -
application/json
告诉服务器消息主体是序列化后的JSON字符串。
三、爬虫基本方法
1. 采集方案分类
一般我们采集网站只采集需要的指定的数据,采集方案分类:
- 利用http协议采集 - 页面分析
- 利用api接口采集 - app数据采集
- 利用目标网站的api采集 - 微博、github
2. requests库
官方文档地址:https://requests.readthedocs.io/zh_CN/latest/
安装:
pip install requests
如果使用了虚拟环境,请确保在虚拟环境再安装一遍,保证使用了虚拟环境的项目正常运行
初探,爬一下百度页面:
import requests
res = requests.get("http://www.baidu.com")
print(res.text)
百度页面的html代码就打印出来了:
后面具体项目再详细介绍具体用法。
3. 正则表达式
4. beautifulsoup用法
5. xpath基本语法
6. css选择器提取元素
本文地址:https://blog.csdn.net/zy1281539626/article/details/111144236