python爬虫(一):爬虫基本流程

一、了解爬虫

网络爬虫(网页蜘蛛、网络机器人等)是通过程序去获取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等信息,下图是请求百度收缩时,所有的请求头部信息参数;

python爬虫(一):爬虫基本流程

请求体
请求时携带的数据,如提交表单数据时候的表单数据(POST)

Response

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

响应头、响应状态

有多种响应状态,如:200代表成功,301跳转,404找不到页面,502服务器错误。

python爬虫(一):爬虫基本流程

响应体

最主要的部分,包含请求资源的内容,如网页HTMl,图片,二进制数据等;

爬虫能够爬取什么类型的数据?

网页文本:如HTML文档,Json格式化文本等
图片:获取到的是二进制文件,保存为图片格式
视频:同样是二进制文件
其他:只要请求到的,都可以获取

如何解析数据?

  1. 直接处理
  2. Json解析
  3. 正则表达式处理
  4. BeautifulSoup解析处理
  5. PyQuery解析处理
  6. XPath解析处理

关于抓取的页面数据和浏览器里看到的不一样的问题

出现这种情况是因为,很多网站中的数据都是通过js,ajax动态加载的,所以直接通过get请求获取的页面和浏览器显示的不同。

如何解决js渲染的问题?

分析ajax
Selenium/webdriver
Splash
PyV8,Ghost.py

怎样保存数据

文本:纯文本,Json,Xml等

非关系型数据库:MongoDB,Redis等key-value形式存储

关系型数据库:如mysql,oracle,sql server等结构化数据库