- 爬虫的概念
- 什么是爬虫?
- 爬虫的价值?
- 爬虫是否合法?
- 如何在使用爬虫时避免进去?
- 爬虫在使用场景中的归类
- 通用爬虫
- 聚焦爬虫
- 增量爬虫
- 爬虫的矛与盾
- 反爬机制
- 反·反爬机制
- robots.txt协议(君子协议)
- http && https
- http协议
- https协议
- 爬虫实战
- requests模块
- 描述
- 实战
- 爬取页面源码
- 简易网络采集器
- 百度翻译
- 解析
- 代码
- 豆瓣电影排行榜
- 查看用户代理
- 代码
- json解析工具
- 肯德基餐厅位置
通过编写程序模拟浏览器上网,让其去互联网上抓取数据的过程。
关键点:模拟——抓取
实际应用和就业
爬虫是否合法?法律中不禁止爬虫;具有违法风险——** 技术无罪 **
善意爬虫——恶意爬虫
爬虫带来的风险可以体现为:1、爬虫干扰了被访问网站的正常运行;爬虫抓取了收到法律保护的特定类型的数据或信息
优化自己的程序,避免干扰被访问网站的正常运行;在使用或传播爬取的数据时一定要注意审查是否涉及个人或公司隐私等敏感内容,一定要及时停止。
爬虫在使用场景中的归类 通用爬虫搜索引擎抓取系统重要组成部分,通用爬虫抓取一整张页面数据
聚焦爬虫在通用爬虫基础上,抓取页面中特定的局部内容。
增量爬虫检测网站中数据更新的情况,只会抓取网站中更新出来的数据。
爬虫的矛与盾 反爬机制门户网站可以通过指定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
反·反爬机制爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而获取信息
robots.txt协议(君子协议)规定网站中哪些数据可以被爬取,哪些不可以被爬取(例如:www.taobao.com/robots.txt)
http && https http协议概念:服务器和客户端进行数据交互的一种形式。
爬虫中常用请求头信息:
1、User-Agent:请求载体的身份标识
2、Connection:请求完毕后是否断开连接(close && keep-alive)
爬虫中常用的响应头信息:
Content-Type:服务器响应回客户端的数据类型
概念:安全的http,加密
数据加密的方式:
1、对称秘钥加密:
2、非对称秘钥加密
3、证书秘钥加密
概念:Python中原生的一款基于网络请求的模块,功能强大,简单便捷,效率极高。
作用:模拟浏览器发起请求。
地位:爬虫的半壁江山
使用流程:指定url——发起请求——获取响应数据——持久化存储
环境安装:pip install requests
import requests
if __name__ == '__main__':
# 指定url
url = 'https://www.sogou.com/'
# 发起请求
response = requests.get(url=url)
# 获取响应数据(源码数据的字符串文本)
page_text = response.text
print(page_text)
# 持久化存储
with open('./sogou.html', 'w', encoding='utf-8') as fp:
fp.write(page_text)
print('end')
简易网络采集器
import requests
# UA伪装机制:门户网站服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某浏览器,说明该请求是一个正常请求
# 但是,如果检测到的请求的载体身份标识不是基于某一款浏览器,则被定义为不正常请求,服务器端会拒绝该次请求
# User-Agent(请求载体的身份标识)
if __name__ == '__main__':
# UA伪装:将对应的UA封装到一个字典中
UA = input('enter UA:')
headers = {
'User-Agent': UA
}
# 指定url
url = 'https://www.sogou.com/web'
# 处理url携带的参数——封装到字典中
kw = input('enter a word:')
param = {
'query': kw
}
# 发起请求,发起的请求是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url, params=param, headers=headers)
# 获取响应数据(源码数据的字符串文本)
page_text = response.text
file_name = kw + 'html'
# 持久化存储
with open(file_name, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print('end')
百度翻译
解析
1、携带参数的post请求
2、响应数据是一组json数据
import requests
import json
# UA伪装机制:门户网站服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某浏览器,说明该请求是一个正常请求
# 但是,如果检测到的请求的载体身份标识不是基于某一款浏览器,则被定义为不正常请求,服务器端会拒绝该次请求
# User-Agent(请求载体的身份标识)
if __name__ == '__main__':
# 指定url
url = 'https://fanyi.baidu.com/sug'
# UA伪装
UA = input('enter UA:')
headers = {
'User-Agent': UA
}
# 处理url携带的参数——封装到字典中
kw = input('enter a word:')
data = {
'kw': kw
}
# 发起请求,发起的请求是携带参数的,并且请求过程中处理了参数
response = requests.post(url=url, data=data, headers=headers)
# 获取响应数据:json()方法返回的是obj,如果确认相应数据是json类型时才能使用
dic_obj = response.json()
file_name = kw + '.json'
fp = open(file_name, 'w', encoding='wtf-8')
json.dump(dic_obj, fp=fp, ensure_ascii=False)
豆瓣电影排行榜
查看用户代理
网站:chrome://version/
代码if __name__ == '__main__':
# 指定url
url = 'https://movie.douban.com/j/chart/top_list'
paams = {
'type': '24',
'interval_id': '100:90',
'action': '',
'start': '20', # 从库中第几部开始取
'limit': '20', # 一次取出多少部
}
headers = {
'User-Agent': ''
}
response = requests.get(url=url, params=paams, headers=headers)
list_data = response.json()
fp = open('./douban.json', 'w', encoding='utf-8')
json.dump(list_data, fp=fp, ensure_ascii=False)
print('finish')
json解析工具
网站:https://www.json.cn/
肯德基餐厅位置


