如果不知道啥是爬虫 ,传送门--------->五分钟告诉你什么是爬虫
一、为什么学习爬虫
大数据时代,根据数据分析用户购买意向,从而进行商业相关调整。浏览器中用户能拿到的,原则上爬虫都可以爬到。
关于反爬:资源同等情况下,爬虫胜利。
爬虫与黑客的区别:
- 爬虫:灰色地带,带账号权限操作,只是一种便利的获取数据。
- 黑客:违法,免爬取,付费。
二、爬虫的分类:
- 通用爬虫:搜索引擎和大型web服务提供的爬虫。弊端:冗余多,占容量。不精准。
- 聚焦爬虫:针对特定网站的爬虫,定向的获取某方面数据的爬虫。(累积式、增量式、deepweb式)
三、爬虫的工作原理
robots协议:君子协议,把握好爬取的度,哪些可以爬,哪些不能爬。
四、编码
爬虫请求回来的数据是bytes类型(二进制)
utf-8 是Unicode的一种实现形式
http请求的过程
-
浏览器先向地址栏中的url发起请求,并获取相应
-
在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
-
浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
-
从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染
五、Python中爬虫库
Requests模块
特点:(vs urllib)
- 简单易用
- Python2,Python3一模一样。
- 底层库是urllib
安装:
pip install requests
栗子1:
# requests 模块基本使用
def load_baidu_data():
# 1.url
url = 'https://www.baidu.com/'
# 2.发送请求
response = requests.get(url)
# text --> str (优先使用content)
data = response.text
# content -->bytes--->str (优先使用content)
data2 = reponse.content.decode('utf-8')
# 3.验证数据
print(response)
print(data)
if __name__ == '__main__':
load_baidu_data()
requests模块属性介绍:
import requests
# requests 属性简介
def load_baidu_data():
# 1. 目标url
url = 'http://www.baidu.com/'
# 2. 发请求
response = requests.get(url)
# 3. 状态码
code = response.status_code
# 4. 请求头 user-agent 一个反爬点
request_headers = response.request.headers
# 5. 响应头
response_headers = response.headers
# 6. 请求的cookies
request_cookies = response.request.cookies # request._cookie 版本问题
# 7. 响应的cookies
response_cookies = response.cookies
if __name__ == '__main__':
load_baidu_data()
import requests
# import random # 每次随机获取不同浏览器信息
def load_data():
url = "http://www.baidu.com/"
use_headers ={ # 高并发的时候,随机更换此浏览器版本
'User_Agent': xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
#请求的时候 添加user——agent
response = requests.get(url, headers = use_headers)
# bytes --->str
data = response.content.decode()
request_headers = response.request.headers
with open('03headers.html','w')as f:
f.write()
if __name__ == '__main__':
load_data()
download_image
import requests
def download_image():
import requests
# 图片的url
url = 'https://www.baidu.com/img/bd_logo1.png'
# 响应本身就是一个图片,并且是二进制类型
response = requests.get(url)
# print(response.content)
# 以二进制+写入的方式打开文件
with open('baidu.png', 'wb') as f:
# 写入response.content bytes二进制类型
f.write(response.content)
传参爬虫
我们在使用百度搜索的时候经常发现url地址中会有一个 ?
,那么该问号后边的就是请求参数,又叫做查询字符串
eg: https://www.baidu.com/s?wd=python&a=c
请求参数的形式:字典
kw = {'wd':'长城'}
请求参数的用法
requests.get(url,params=kw)
关于参数的注意点
在url地址中, 很多参数是没有用的,比如百度搜索的url地址,其中参数只有一个字段有用,其他的都可以删除 如何确定那些请求参数有用或者没用:挨个尝试! 对应的,在后续的爬虫中,越到很多参数的url地址,都可以尝试删除参数
1.对https://www.baidu.com/s?wd=python
发起请求可以使用requests.get(url, params=kw)
的方式
2.也可以直接对https://www.baidu.com/s?wd=python
完整的url直接发送请求,不使用params参数
request post请求
- 登录注册( POST 比 GET 更安全)
- 需要传输大文本内容的时候( POST 请求对数据长度没有要求)
所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求
-
用法:
response = requests.post("http://www.baidu.com/", \ data = data,headers=headers)
-
data 的形式:字典
-
在模拟登陆等场景,经常需要发送post请求,直接使用
requests.post(url,data)
即可
Scrat是热爱坚果的松鼠哦~
下一篇:爬虫(二)代理