爬虫的流程
网络爬虫的流程其实非常简单
主要可以分为四部分:
一、发起请求
通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers、data等信息,然后等待服务器响应。这个请求的过程就像我们打开浏览器,在浏览器地址栏输入网址:www.baidu.com,然后点击回车。这个过程其实就相当于浏览器作为一个浏览的客户端,向服务器端发送了 一次请求。
二、获取响应
如果服务器能正常响应,我们会得到一个Response,Response的内容便是所要获取的内容,类型可能有HTML、Json字符串,二进制数据(图片,视频等)等类型。这个过程就是服务器接收客户端的请求,进过解析发送给浏览器的网页HTML文件。
三、解析内容
得到的内容可能是HTML,可以使用正则表达式,网页解析库进行解析。也可能是Json,可以直接转为Json对象解析。可能是二进制数据,可以做保存或者进一步处理。这一步相当于浏览器把服务器端的文件获取到本地,再进行解释并且展现出来。
四、保存数据
保存的方式可以是把数据存为文本,也可以把数据保存到数据库,或者保存为特定的jpg,mp4 等格式的文件。这就相当于我们在浏览网页时,下载了网页上的图片或者视频。
发送请求的请求方式
主要有:GET/POST两种类型常用,另外还有HEAD/PUT/DELETE/OPTIONS
GET和POST的区别就是:请求的数据GET是在url中,POST则是存放在头部URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它
URL的格式由三个部分组成: 第一部分是协议(协议类型)。 第二部分是存有该资源的主机IP地址(主机域名)。 第三部分是主机资源的具体地址(文件名)。
请求头
包含请求时的头部信息,如User-Agent,Host,Cookies等信息
请求体 请求是携带的数据,如提交表单数据时候的表单数据(POST)
HTTP协议介绍
获取响应中的Response中包含了什么
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
响应状态
有多种响应状态,如:200代表成功,301跳转,404找不到页面,502服务器错误响应头
如内容类型,类型的长度,服务器信息,设置Cookie响应体
最主要的部分,包含请求资源的内容,如网页HTMl,图片,二进制数据等网页文本:如HTML文档,Json格式化文本等 图片:获取到的是二进制文件,保存为图片格式 视频:同样是二进制文件 其他:只要请求到的,都可以获取
如何解析数据
直接处理
Json解析
正则表达式处理
BeautifulSoup解析处理
PyQuery解析处理
XPath解析处理
关于抓取的页面数据和浏览器里看到的不一样的问题
出现这种情况是因为,很多网站中的数据都是通过js,ajax动态加载的,所以直接通过get请求获取的页面和浏览器显示的不同。如何解决js渲染的问题?
分析ajax Selenium/webdriver Splash PyV8,
怎样保存数据
文本:纯文本,Json,Xml等
怎么保存数据
关系型数据库:如mysql,oracle,sql server等结构化数据库
非关系型数据库:MongoDB,Redis等key-value形式存储
数据库使用