爬虫:通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程
分类:
通用爬虫:抓取系统重要组成部分,抓一整张页面数据
聚焦爬虫:抓取页面特定的局部内容
增量式爬虫:检测网站中数据跟新的情况,只抓取网站中最新更新的数据
robots.txt协议:
君子协议,规定了网站中可以爬取的数据
超文本传输协议
http协议:
服务器与客户端进行数据交互的形式
常用请求头信息:
user-agent:请求载体的标识
UA伪装:门户网站的服务器会检测请求载体的身份标识,如果请求载体身份是一款浏览器则正常,如果不是浏览器(则是基于爬虫的)则不正常,服务器可能拒绝该次请求
connection:请求完毕后,是断开连接还是保持连接
常用响应头信息:
Content-Type:服务器响应回客户端的数据类型
https协议:
安全的超文本传输协议,经过数据加密
加密方式:
1. 对称密钥加密:客户端将加密后数据与解密方式传输给服务器
2. 非对称密钥:让服务器设定好加密方式,客户端按照该方式加密后传输密文(公钥加密私钥解密)
弊端:中间截取服务器传给客户端的公钥后,进行修改导致出错
3. 证书密钥加密:加入三方机构(证书认证机构),服务器将公钥发送给证书认证机构,在上面进行数字签名后发送给客户端
解决了修改公钥的漏洞,客户端只认可有数字签名的公钥
## 环境安装pip3 install requests
requests模块:模拟浏览器发请求
import requests
二、库使用与爬虫基本步骤
爬虫基本步骤
# coding = utf-8
# 需求:爬取淘宝首页的页面数据
import requests
if __name__ == "__main__":
# step1:指定url
url = 'https://www.taobao.com/'
# step2:发起请求,response接收get方法返回的响应对象
response = requests.get( url =url)
# step3:获取响应数据,text属性返回字符串形式的响应数据
page_txt = response.text
print(page_txt)
# step4:持久化存储
with open('./taobao.html','w',encoding='utf-8') as fp:
fp.write(page_txt)
print(type(page_txt))
UA伪装
发送参数与响应
# coding = utf-8
# 需求:爬取淘宝首页的页面数据
import requests
if __name__ == "__main__":
# step1:指定url
url = 'https://www.taobao.com/'
# step2:发起请求,response接收get方法返回的响应对象
response = requests.get( url =url)
# step3:获取响应数据,text属性返回字符串形式的响应数据
page_txt = response.text
print(page_txt)
# step4:持久化存储
with open('./taobao.html','w',encoding='utf-8') as fp:
fp.write(page_txt)
print(type(page_txt))
UA伪装
发送参数与响应
让爬虫对应的请求载体身份标识伪装成某一款浏览器
抓取百度翻译的结果:
import requests
# UA伪装
header = {
'user-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
}
get = input('输入要翻译的英文:')
# post请求参数处理
url = 'https://fanyi.baidu.com/sug'
param = {
'kw':get
# 向服务器发送的表单参数kw
}
# 5.获取响应数据:json()方法返回的是obj
# (如果确认响应数据是json类型的,才可以使用json())
response = requests.post(url = url, data=param,headers = header)
json = response.json()
print(json)
抓取豆瓣网电影信息:
import requests
url = "https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0&genres=%E5%96%9C%E5%89%A7"
header = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
}
param = {
"sort": "U",
"range": "0,10",
"tags": "",
"start": "0",
"genres": "喜剧"
}
response = requests.get(url=url,params = param,headers=header)
json = response.json()
print(json)
三、数据解析
聚焦爬虫:爬取页面中指定的页面内容(相比于通用爬虫的流程增加了数据解析步骤)
数据解析分类: 正则 | bs4 | xpath(*通用)
数据解析原理:
解析的局部的文本内容会在 标签之间 或 标签的属性中(如图片的url) 存储
解析步骤:
1. 进行指定标签的定位
2. 提取存储的数据
图片的抓取¶
content返回的是二进制形式的图片数据
text(字符串) content(二进制)json() (对象)
url = "https://img3.zhaogepu.com/img/182176/jianpu/20121116_20121110165052327.gif"
# 获取图片的二进制数据
img_data = requests.get(url=url).content
with open('./指纹简谱.jpg','wb') as fp:
fp.write(img_data)



