文章目录
1.什么是爬虫
- 爬虫就是 模拟客户端(浏览器)发送网络请求,获取响应,按照规则拉取数据的程序
- 模拟客户端(浏览器)发送网络请求:照着浏览器发送一模一样的请求,获取和浏览器一模一样的数据
2.爬虫的的数据去哪了
- 呈现出来:展示在网页上,或者展示在app上
- 进行分析:从数据中寻找一些规律
3.浏览器的请求
- 统一资源定位符url
- 在Chrome中点击检查,点到network
- url = 请求协议(http&https)+网站的域名+资源的路径+参数
- 浏览器请求url地址
- 当前url对应的响应+jd+css+图片——>elements中的内容
- 爬虫请求url地址
- 只能请求当前url对应的响应- elements的内容和爬虫获取的
- url地址的响应不同,爬虫中需要以当前url地址对应的响应为准提取数据
- 当前url地址对应的响应在哪里
- 从network中找到当前的url地址,点击response
- 或在页面上右键显示网页源码
4.认识HTTP、HTPS
- HTTP:超文本传输协议
- 以明文的形式传输
- 效率更高,但不安全
- HTTPS:HTTP + SSL(安全套接字层)
- 传输之前数据先加密,之后解密获取内容
- 效率较低,但是安全
- get请求和post请求的区别
- get请求没有请求体,post有,get请求把数据放到url地址中
- post请求常用于登录注册
- post请求携带的数据量比get大,多,常用于传输大文本的时候
- HTTP协议之请求
- 1.请求行
- 2.请求头
- User-Agent:用户代理:对方服务器能够通过 user-agent知道当前请求对方资源的是否是浏览器、什么浏览器
- 如果我们需要模拟手机版的浏览器发送网络请求,对应的,就需要把user-agent改成手机版
- Cookie:用来存储用户信息的,每次请求会被携带上发送给对方的浏览器
- 要获取登录后才能访问的页面
- 对方的服务器会通过cookie来判断我们是否是一个爬虫
- User-Agent:用户代理:对方服务器能够通过 user-agent知道当前请求对方资源的是否是浏览器、什么浏览器
- 3.请求体
- 携带数据
- get请求没有请求体
- post请求有请求体
- HTTP协议之响应
- 1.响应头
- Set-Cookie:对方服务器通过该字段设置cookie到本地
- 2.响应体
- url地址所对应的响应
- 1.响应头
5. requests模块的学习
- 使用之前,安装requests库
- 打开所安装python文件夹中的Scripts文件夹,打开cmd(输入cmd),输入 pip install resquests
- 发送get,post请求,获取响应
- response = requests.get(url) #发送get请求,请求url地址对应的响应
- response = requests.post(url) #发送post请求
- response的方法
- response.text
- 该方式往往会出现乱码,出现乱码在之前添加response.encoding=“utf-8”
- response.content.decode()
- 把响应的二进制字节转化为str类型
- response.request.url #发送请求的url地址
- response.url #响应请求
- response.request.headers #请求头
- response.headers #发送请求的url地址
- response.text
- 获取网页源码的正确打开方式(通过下面三种方式一定能够获得网页正确源码之后的字符串)
- 1.response.content.decode()
- 2.response.content.decode(“gbk”)
- 3.response.text
- 发送带headers的请求
- 为了模拟浏览器,获取和浏览器一模一样的数据
headers = {“User-Agent”:" … “,“Referer”:” … "}
response = requests.get(url,headers=headers)
- 为了模拟浏览器,获取和浏览器一模一样的数据
- 使用超时参数
- requests.get(url,headers=headers,timeout=3) #3秒之内必须返回响应,否则会报错
- retrying 模块的学习
- pip install retrying
from retrying import retry @retry(stop_max_attempt_number=3) #让程序执行三次,如果三次都报错则报错,如果有一次没报错,则程序往下执行def fun1(): #定义一个函数fun1 print("this is the fun") raise ValueError("this is error") #程序自行报错
- 处理cookie相关的请求
- 1.直接携带cookie请求url地址
- 1.cookie放在headers中
headers={"User-Agent":"…..","Cookie":"….."}
- 2.cookie字典传给cookie参数
cookie字典{"Name":"Value", ......} requests.get(url,cookie=cookie_dict)
- 2.先发送post请求,获取cookie,带上cookie请求登录后的页面
- 1.session =request.session() #session请求登录后的页面
- 2.session.post(url,data,headers) #服务器设置在本地的cookie会保存在session中
- session.get(url) #会带上之前保存在session中的cookie,能够请求成功
6.数据提取方法
json文件
- 数据交换格式,看起来像python类型(列表,字典)的字符串
- 使用json之前需要导入 import json
- json.loads
- 把json字符串转化为python类型
- json.loads(json字符串)
- json.dumps
- 把 python类型抓化为json字符串
- json.dumps({})
- json.dumps({},ensure_ascii=False,indent=2)
- ensure_ascii:让中文显示为中文
- indent:能够让下一行在上一行的基础上空格
- 豆瓣电影电视剧爬虫案例
xpath和lxml方法
- xpath
- 一门从html中提取数据的语言
- xpath语法
- 谷歌xpather helper 插件:帮助我们从element中定位数据
- 1.选择节点(标签)
- /html/head/meta:能够选中html下的head下的所有的meta标签
- 2.//:能够从任意节点开始选择
- //li当前页面上的所有的li标签
- /html/head/linkhead下的所有的link标签
- 3.@符号的用途
- 选择具体某个元素://div[@class="feed-infinite-wrapper"]/ul/li(选择class=“feed-infinite-wrapper”的div下的li)
- a/@href:选择a的href的值
- 4.获取文本:
- /a/text():获取a下的文本
- /a//text():获取a下的所有文本
- lxml
- 安装pip install lxml
- 使用
from lxml import etree element = etree.HTML("html字符串") element.xpath("")
7.基础知识点的学习
- format:字符串格式化的一种方式
"{}博客".format(1) "{}博客".format([1,2,3]) #列表 "{}博客".format({1,2,3}) #字典 "{}博客{}".format({1,2,3},[1,2,3])
- 列表推导式
- 帮助我们快速的生成包含一堆数据的列表
[i+10 for i in range(1,10)] –> [10,11,12,…,19]
["10月{}日".format(i) for i in range(1,20)] –>[“10月1日”,“10月2日”,…''10月9日"]
- 帮助我们快速的生成包含一堆数据的列表
- 字典推导式
- 帮助我们快速的生成包含一堆数据的字典
{i+10:i for i in range(10)}–>{10:0,11:1,…19:9}
{"a{}".format(i): 10 for i in range(3)}–> {“a0”:“10”,“a1”:“10”,“a3”:“10”}
- 帮助我们快速的生成包含一堆数据的字典
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试