爬虫基础-网站篇

来源:互联网 发布:原生js 触发事件 编辑:程序博客网 时间:2024/05/17 01:16
  1. 网站基础
    1.1.1 html
    1.1.2 http 协议
    1.1.3 xpath
    1.1.4 正则匹配

1.1 网站基础
1.1.1 html

在大数据时代,数据就是企业的命脉,而数据很多来源于各种各类的网站,因此,今天我们就先来了解一下网站的构成。网站页面基本是由html和css组成,所以我们先来看一下html的基础知识。Html是用来描述网页的语言,但不是编程语言,而是标记语言。

如图所示:
这里写图片描述
这是一个网页html的基本结构,在爬虫中,经常看到的标签有:
<image> :向网页嵌入一张图片
<div>用于将页面分块
<p> :包含文本信息
<span> :包含文本或者分区域
在写爬虫的时候经常需要使用xpath定位相应的数据,靠的就是这些标签。

Html就像门板,如果门板需要装饰,就使用CSS。

在爬虫中经常需要用到css选择器,来选择特定的样式,如图:
这里写图片描述

1.1.2 http 协议

Html是由服务器通过特定的协议,发送给浏览器,并通过浏览器展现给我们。在写爬虫时,向页面发出请求信息,需要把自己的爬虫伪装成浏览器,然后采集相应的数据。随便点开一个网站,右键---检查,在选择栏点击“Network”刷新页面,即可看到:

这里写图片描述
其中,General为一般信息,Response Headers为服务器返回信息,Requests Headers为浏览器请求信息,为了让自己的爬虫更加强壮,在请求时会带上头部信息,也就是Requests Headers中的参数。

Requests Headers 参数详解:
Get/http/1.1:Get 表示读取请求,将从服务器获取相应的网页数据。/表示浏览器请求的路径,最后的http/1.1 表示采用1.1 版本的http协议。
Host:www.baidu.com : Host后面跟的是域名值,不同的网站,host也会不同。
User-Agent :xxx :向浏览器提供你的浏览器类型和操作系统版本信息。
Cookies :用来存放我们的登陆信息,在爬取需要登陆的网站,比如豆瓣,之后的时候,就要带上账号密码,在正常登陆后,浏览器会把信息存放在cookies里。

Response Headers参数详解:
HTTP响应分为Header,Body,上面的Header.
HTTP/1.1 200 ok :200表示网页请求成功。
Content-Type:text/html,charset =utf-8 :Content-Type表示Body的信息格式;text/html表示返回的是html网页,charset = utf-8表示网页的编码格式是utf-8.

1.1.3 xpath

在爬虫中写xpath语句,提取我们需要的信息。
Xpath用法详解:
必须用引号(单引号,双引号)包起来
标签直接写名字
属性用@属性值来表示其值
层级结构用/分隔
审查元素,在Console控制台中调试:

实例:
这里写图片描述

1.1.4 正则匹配

在爬虫中,除了xpath,还经常用正则来匹配特定字符。
正则表达式是一种特殊的字符序列,它能帮我们检查一个字符串是否满足某种匹配。除了爬虫,在自然语言处理中也经常需要用到。

在python中,有相应的包:re
掌握常用的正则表达式:
^ : 匹配字符串的开头
$ : 匹配字符串的末尾
. : 除了换行符,匹配任意字符串
* :匹配前面的规则零次或多次
+ :匹配前面的规则一次或多次
? :匹配前面的规则0次或1次
[ ] :表明一个字符集合,能够匹配包含在其中的任意字符
():表示匹配括号内的表达式,也表示一个分组
{n} : 匹配前面的规则n次
{n,m} : 匹配前面的规则最少n 次,最多m 次
{n,} : 匹配前面的规则至少n 次
\d : 匹配数字
\w :匹配字母,数字,下划线
\s :匹配任何空白符,包括空格,制表符

使用案列:
这里写图片描述
其中re.I为修饰符,可选标志,表示使匹配对大小写不敏感。类似的还有:
re.S :使匹配包括换行符在内的所有字符
re.M :多行匹配

类似match的函数,还有实现其他功能的函数:
re.search(pattern,str[,flags]) :从字符串内匹配,直到匹配成功后返回一个对象,否则返回None.
re.sub(pattern,repl,str[,count = 0,flags]): 正则替换,将正则表达式匹配到的字符串替换成repl,其中count 默认为0,返回替换后的字符串。
Re.findall(pattern,str[,flags]) :在字符串内查找所有满足正则表达式的字符串,并把它们作为一个列表返回。