定义:
-通过编写程序,模拟浏览器上网,让其去互联网上抓取数据。
爬虫在使用场景的分类:
-通用爬虫:
爬虫系统的重要组成部分,抓取的是一整张页面数据。
-聚焦爬虫:
建立在通用爬虫的基础上,抓取的是页面中特定的局部内容
-增量式爬虫:
检测到网站中数据更新的情况,只抓取网站中最新更新出来的数据
爬虫的矛与盾:
-反爬机制:
门户网站可以制定响应的策略与技术手段,防止爬虫程序进行数据爬取。
-反反爬策略:
爬虫程序可以通过制定相关策略与技术手段,破解门户网站中的反爬机制,从而获取网站数据。
robots.txt协议:
-君子协议。规定了网站中哪些数据可以被爬取,哪些数据不可以被爬取。
HTTP协议:
概念:
该协议就是服务器和客户端进行数据交互的一种形式。
常用头信息:
- User-Agent:请求载体的身份标识。
- Connection:请求完毕后,是断开连接还是保持连接。
常用响应头信息:
- Connection-Type:服务器响应客户端的数据类型。
HTTPS协议:
-安全的超文本传输协议
加密方式:
-对称密钥加密
-非对称密钥加密
-证书密钥加密
requests模块:python原生的网络请求模块,功能强大,效率极高。
作用:
-模拟浏览器发请求。
如何使用:
1.指定URL
2.发送请求(get、post请求)
3.获取响应数据
4.持久化存储
环境安装:
pip install requests
实战编码:
-需求:爬取搜狗页面的页面数据
代码:
import requests
if_name_ == "_main_"
url = "搜狗的网站"
response = requests.get(url = url)
page_text = reponse.text
print(page_text)
with open('./sogou.html','w',encoding = 'utf-8') as fp:
fp.write(page_text)
print("succed)
-需求1.实现搜狗指定词条对应的搜索结果:
*应用UA伪装
代码:
import requests
if_name_ == "_main_"
#UA封装:将对应的User-Agent封装到一个字典里面
headers = {
'User-Agent':'XXX'
}
url = 'https://www.sogou.com/web'
#处理URL携带的参数:封装到字典中
kw = input('enter a word')
param = { #将参数封装到字典里面
'quary':kw
}
requests.get(url = url,params = param,headers=headers)
#requests.get(url,params(参数),headers(用户标识))
#对指定URL发起的请求对应的URL是携带参数的,并且请求过程中处理了参数
pace_text = requests.text
fileName = kw+'.html'
with open(fileName,'w',encoding='utf-8')as fp
fp.write(page_text)
print(fileName,'success')
#UA:User-Agent(请求载体身份标识)
#UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,则说明该请求为一个正常的请求,反之则为一个不正常的请求,即为爬虫请求,则服务器端可能拒绝该请求。
#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
-需求2.破解百度翻译
*post请求(携带参数)
*响应数据是一组Json数据
代码:
import requests
post_url = 'XXX' #1.指定URL
headers = {
'User-Agent':'XXX'
} #2.UA伪装
data = {
'kw' :'dog'
} #3.参数处理
#4.请求发送
response = requests.post(url = url,data = data,headers = headers)
requests,post(url,data,json,headers)
#5.获取响应数据:json()返回的是obj(如果确认服务器响应数据为json类型,才可以用json()方法)
dic_obj = response.json()
print(dic_obj)
#6.进行持久化存储
fp = open('./dog.json','w',encoding = 'utf-8')
json.dump(dic_obj,fp = fp,ensure_ascii = False)