什么是爬虫?
- 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。
爬虫的价值
- 实际应用
- 就业
爬虫究竟是合法还是违法的?
- 在法律中是不被禁止
- 具有违法风险
- 善意爬虫 恶意爬虫
爬虫带来的风险可以体现在如下2个方面:
- 爬虫干扰了被访问网站的正常运营
- 爬虫抓取了收到法律保护的特定类型的数据或信息
如何在使用编写爬虫的过程中避免进入局子的厄运呢?
- 时常的优化自己的程序,避免干扰被访问网站的正常运行
- 在使用,传播爬取到的数据时,审查抓取到的见容,如果发现了涉及到用户因此商业机密等敏感内容需要及时停止爬取或传播。
爬虫在使用场景中的分类
- 通用爬虫:
抓取系统重要组成部分,抓取的是一整张页面数据。 - 聚焦爬虫:
- 是建立在通用爬虫的基础之上。抓取的是页面中特定的局部内容。
- 增量式爬虫:
- 检测网站中数据更新的情况,只会抓取网站中最新更新出来的数据。
反爬机制:
门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
反反爬机制:
爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站中相关的数据。
robots.txt协议:
君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。
http协议
- 概念:就是服务器和客户进行数据交互的一种形式。
常用请求头信息:
-User-Agent:请求载体的身份标识。
-Connection:请求完毕后,是断开连接还是保持连接。
常用响应头信息:
-Content-Type:服务器响应回客户端的数据类型。
https协议:
-安全的超文本传输协议
加密方式
- 对称秘钥加密
- 非对称秘钥加密
- 证书秘钥加密(https协议)
Requests 模块
urllib模块(古老的)
- request模块
Request模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。
作用:模拟浏览器发请求。
环境安装:
-----pip install requests
如何使用:(requests模块的编码流程)
-指定url
-发起请求
-获取响应数据
-持久化存储
实战编码: - 需求:爬取搜狗首页的页面数据
import requests
if __name__=="__main__":
#指定url
url = 'https://www.sogou.com/'
#发起请求
#get方法会返回一个响应对象
response = requests.get(url=url)
#获取响应数据,text返回的是字符串形式的响应数据
page_text = response.text
print(page_text)
#持久化存储
with open('./sogao.html','w',encoding='utf-8')as fp:
fp.write(page_text)
print('爬取数据结束!')
实战巩固:
- 需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)
#UA:User-Agent(请求载体的身份标识)
#UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器。
#说明该请求是一个正常的请求。但是,如果检测到请求的载体身份标识不是基于某一款浏览器,则表示为不正常
#的请求(爬虫),则服务器端就很有可能拒绝该次请求。
#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
import requests
if __name__=="__main__":
#UA伪装:将对应的User-Agent封装到一个字典中
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'
}
url = "https://www.sogou.com/sie?"
#处理url携带的参数:封装到字典中
keyword = input('enter a word:')
param = {
'query':keyword
}
#对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url,params=param,headers=headers)
page_text = response.text
fileName = keyword +'.html'
with open(fileName,'w',encoding='utf-8')as fp:
fp.write(page_text)
print(fileName,'保存成功!')
期间遇到一些问题也与大家分享一下:
安装requests模块时,需要升级pip:
python -m pip install -U --force-reinstall pip
查看请求头:
1,打开浏览器,点击浏览器选项找到开发者工具(或者有的浏览器快捷键F12)
2,选择网络选项卡,并开启调试:
3,在地址栏输入你的要连接的IP地址或请求后确定,将获取到你的请求,点击具体请求可查看请求头的详细内容.