一、了解爬虫
网络爬虫(网页蜘蛛、网络机器人等)是通过程序去获取web页面上的目标数据(图片、视频、文本等等)
二、爬虫的本质
模拟浏览器打开网页,获取浏览器的数据(爬虫者想要的数据);
浏览器打开网页的过程:当你在通过浏览器访问一个链接后,经过DNS服务器找到服务器IP,向服务器发送一个request;服务器经过解析后,给出一个response(可以是html、js、css等文件内容),浏览器(本质:编译器)解析渲染后,显示网页内容;
三、爬虫的基本流程
四步基础流程:1.请求目标链接;2.获取响应内容;3.解析内容;4.存储数据;下面分别进行简单描述:
1.请求目标链接
发起一个带有header、请求参数等信息的Request,等待服务器响应;
2.获取响应内容
服务器正常响应后,Response的内容即包含所有页面内容(可以是HTML、JSON字符串、二进制数据(图片、视频)等等)
3.解析内容
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析;可能是Json字符串,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理……
4.存储数据
存储形式多样,可以存为文本,也可以存储到数据库,或者存为特定格式的文件;
四、简单的认识Request、Response
Request一般的请求方式:get/port两种常见类型,还有:HEAD/PUT/DELETE/OPTIONS
- GET - 从指定的资源请求数据。
- POST - 向指定的资源提交要被处理的数据
get请求的注意点:举例:
/test/demo_form.asp?name1=value1&name2=value2
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制
- GET 请求只应当用于取回数据
URL简单说明:
【百度】url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
URL的格式由三个部分组成:
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包括端口号);
第三部分是主机资源的具体地址,如目录和文件名等;
爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据;
请求头
包含请求时的头部信息,如User-Agent,Host,Cookies等信息,下图是请求百度收缩时,所有的请求头部信息参数;
请求体
请求时携带的数据,如提交表单数据时候的表单数据(POST)
Response
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
响应头、响应状态
有多种响应状态,如:200代表成功,301跳转,404找不到页面,502服务器错误。
响应体
最主要的部分,包含请求资源的内容,如网页HTMl,图片,二进制数据等;
爬虫能够爬取什么类型的数据?
网页文本:如HTML文档,Json格式化文本等
图片:获取到的是二进制文件,保存为图片格式
视频:同样是二进制文件
其他:只要请求到的,都可以获取
如何解析数据?
- 直接处理
- Json解析
- 正则表达式处理
- BeautifulSoup解析处理
- PyQuery解析处理
- XPath解析处理
关于抓取的页面数据和浏览器里看到的不一样的问题
出现这种情况是因为,很多网站中的数据都是通过js,ajax动态加载的,所以直接通过get请求获取的页面和浏览器显示的不同。
如何解决js渲染的问题?
分析ajax
Selenium/webdriver
Splash
PyV8,Ghost.py
怎样保存数据
文本:纯文本,Json,Xml等
非关系型数据库:MongoDB,Redis等key-value形式存储
关系型数据库:如mysql,oracle,sql server等结构化数据库