爬虫基础入门(一)

爬虫的作用
1.数据采集
抓取微博评论(机器学习舆情监控)
抓取招聘网站的招聘信息(数据分析,挖掘)
新浪滚动新闻
百度新闻网站
2.软件测试
爬虫之自动化测试
虫师
3.12306抢票
4.网站上的投票
5.网络安全
短信轰炸
web漏洞扫描
爬虫分类
根据被爬取的数量不同,分类:
通用爬虫:通常指搜索引擎的爬虫
聚焦爬虫:针对特定网站的爬虫

根据是否获取数据为目的,分类:
功能性爬虫,比如,投票,点赞
数据增量爬虫,比如招聘信息

根据url地址和对应的页面类容是否改变,数据增量爬虫分类:
基于url地址变化,内容也随之变化的数据增量爬虫
url地址不变,内容变化的数据增量爬虫

爬虫的流程
流程:url——>发送请求,获取响应——>提取数据——>保存数据
发送请求,获取响应——>提取url地址,继续请求

robots协议:网站通过robots协议,告诉我们搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是道德层面上的约束。
http的重点请求头:
user-agent:告诉对方服务器是什么客户端正在请求资源,爬虫中模拟浏览器非常重要的一个手段
爬虫中通过把user-agent设置为浏览器的ua,能够达到模拟浏览器的效果
cookie:获取登录之后,才能够访问的资源

常见的请求头,响应头
Content-Type
Host(主机和端口号)
Upgrade-Insecure-Rwquests(升级为https请求)
User-Agent(浏览器名称)
Referer(页面跳转处)
Cookie
Authorization(用于表示http协议中需要认证资源的认证信息,如前边web课程中的jwt认证)
浏览器的请求过程:
浏览器获取的内容(elements的内容)包含:url地址对应的响应+js+css+jpg
爬虫会获取:url地址对应的响应
爬虫获取的内容和elements内容不一样,进行数据提取的时候,需要根据url地址对应的响应为准
requests模块的使用
在这里插入图片描述
url地址解码的方法

requests.utils.unquote(url)

requests中headers如何使用
headers = {“User-Agent”:""}
requests.get(url,headers=headers)
requests中如何发送post请求
data = {“浏览器中的form data”}
requests.post(url,data=data)
概念:爬虫就是模拟浏览器发送网络请求,获取请求响应

requests如何发送请求和获取响应
response = requests.get(url)
response.text -> str(获取的数据是字符串类型)
response.encoding=“utf-8”(乱码需要解码,修改编码方式)

response.content -> bytes(获取的数据是字节类型)
response.content.decode()(字节需要编码)

响应:
response.text str类型,
response.content 获取内容,字节类型,需要decode编码
response.status_code 获取状态码
response.request.headers 响应对应的请求头
response.headers 响应头
response.request.url 请求url地址
response.url 响应url地址
response.request._cookie 响应对应请求的cookie;返回cookiejar类型
response.cookies 响应cookie(经过了set-cookie动作,返回cookiejar类型)
response.json() 自动将json字符串类型的响应内容转换为python对象(dict 或者 list)

python3和python2字符串的转化
python2的字符串类型
unicode
unicode.encode(“utf-8”)
str :字节类型
str.decode()
a = “传智” -->str类型
a = u"传智" —》unicode
python3的字符串类型
str
str.encode()
bytes
bytes.decode()

发送带headers的请求

headers = {“User-Agent”:“从浏览器中复制”}
response = requests.get(url,headers=headers)

发送带参数的请求

params = {"":""}
url_temp = “不完整的URL地址”
requests.get(url_temp,params=params)
例:wd为百度词条搜索url的参数key值

百度贴吧爬取过程

面向对象
对象
生活中的客观事物

对事物的客观抽象,在代码中实现class 类型
实列
使用之前对类的实列化之后的结果

requests模块发送post请求

应用场景:登录注册
需要传输大文本内容的时候(post请求对长度没有要求)
用法:
response = requests.post(“http://www.baidu.com”, data = data, headers = headers)
data的形式:字典
data的来源:
固定值,抓包(form data)

案例:百度翻译
在这里插入图片描述

使用代理

1.让服务器以为不是同一个客户端在请求
2.防止我们的真实地址被泄露,防止被追究

正向代理和反向代理(以知不知道最终服务器的地址作为判断标准)

用法:
response = requeses.get(“http://www.baidu.com, proxies = proxies”)
proxies的形式:字典
例如:
proxies = {
“http”: “http://192.168.13.24:8000”,
“https”: “http://192.168.13.24:8000”
}

代理的分类:
透明代理:能够知道真实请求地址
匿名代理:知道在使用代理,但不知道真实的地址
高匿代理:不知道在使用代理
混淆代理:变化的IP地址,别人知道你在用代理,但不知道真实的地址
从使用的协议分类:
http代理 https代理 socket代理

反反爬(自己购买,组装自己的代理IP池)
一段时间内,检测IP访问的频率,访问太多频繁会被屏蔽
检查cookie,user-agent, referer等header参数,若没有则屏蔽
服务方购买所有代理提供商,加入到爬虫数据库里,若检测是代理,则屏蔽

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值