爬虫基础知识
一、爬虫基础知识
1.1python中request库
#request库的安装
pip install requests
request库的get()方法
response 响应
Response对象包含服务器返回的所有信息,也包含请求的Request信息
r = requests.get( url , params=None , **kwargs )
//---url:拟获取页面的 url 链接
//---params:url 中的额外参数,字典或字节流格式,可选
//---**kwargs:12 个控制访问的参数
Response 对象的属性:
属性 | 说明 |
---|---|
r.status_code | HTTP请求的返回状态, 200表示连接成功, 404表示失败 |
r.text | HTTP响应内容的字符串形式,即, url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
Requests 库的 7 个主要方法:
方法 | 说明 |
---|---|
requests.request() | 构造一个请求,支撑以下各方法的基础方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交PUT请求的方法,对应于HTTP的PATCH |
requests.delete() | 向HTML页面提交删除请求,对应于HTTP的DELETE |
状态码
- 1XX 告知请求的处理进度和情况
- 2XX成功
- 3XX表示需要进一步操作
- 4XX客户端错误
- 5XX服务器错误
网络爬虫的尺寸
小规模,数据量小 | 中规模,数据规模较大 | 大规模,搜索引擎 |
---|---|---|
爬取速度不敏感 | 爬取速度敏感 | 爬取速度关键 |
Requests 库 | Scrapy 库 | 定制开发 |
爬取网页、玩转网页 | 爬取网站、爬取系列网站 | 爬取全网 |
1.2python中的json库
- json数据是一种只包含双引号的字符串的格式。任何对象经过json的序列化单引号。
- json表示的对象就是标准JavaScriipt语言对象,json和python内置的数据类型对应如下
JSON类型 | Python类型 |
---|---|
{} | dict |
[] | list |
"string" | str |
数字 | int 或者float |
true/false | True/False |
null | None |
import json
json.dumps(data) #python-->json数据格式的转化
json.dump(data,filename) #将转化为的数据格式保存到filename文件中
#注意:有中文字符时会输出对应的ASCII码,而不是中文,若要输出中文则可以指定ensure_ascii=False
json.loads(data) #json-->python数据格式的转化
1.3xpath学习之python中的lxml
html的了解
超文本标记语言,是用来描述网页的一种语言。 主要用于控制数据的显示和外观。HTML文档一定意义上可以被称为网页。但反过来说网页不仅仅是HTML,网页本质有三部分构成:负责内容结构的HTML,负责表现的CSS,以及负责行为的javascript。本文主要分享的是最核心的内容结构部分。
html的常见标签
<a></a> #定义超链接
<h1></h1> #文本标题标签
1.4xpath
xpath定义
是一种路径查询语言,简单的说就是利用一个路径表达式从html文档中找到我们需要的数据的位置,进而将其写入本地或者数据库中。
xpath常见使用方法
符号 | 功能 |
---|---|
// | 表示在整个文本中查找,是一种相对路径 |
/ | 表示则表示从根节点开始查找,是一种绝对路径 |
text() | 找出文本值 |
@ | 找出标签对应的属性值,比如@href就是找出对应的href链接 |
. | 表示当前节点 |
.. | 表示当前节点的父节点 |
特殊用法
- 以相同的字符开头:starts-with(@属性部分,属性字符相同部分
- 标签套标签:string(.)
函数 | 说明 | 举例 |
---|---|---|
contains | 选取属性或者文本包含某些字符 | //div[contains(@id, 'data')] 选取 id 属性包含 data 的 div 元素 //div[contains(string(), '支付宝')] 选取内部文本包含“支付宝”的 div 元素 |
starts-with | 选取属性或者文本以某些字符开头 | //div[starts-with(@id, 'data')] 选取 id 属性以 data 开头的 div 元素 //div[starts-with(string(), '银联')] 选取内部文本以“银联”开头的 div 元素 |
ends-with | 选取属性或者文本以某些字符开头 | //div[ends-with(@id, 'require')] 选取 id 属性以 require 结尾的 div 元素 //div[ends-with(string(), '支付')] 选取内部文本以“支付”结尾的 div 元素 |