使用程序:jupyter notebook
语言:Python3
jupyter中 Markdown用来写笔记,同时能写html代码,Code用来写代码
特性:代码编写顺序无所谓,执行顺序一定是自上而下的。(只要在一个cell中执行定义好多变量函数等,那么数据就会被加载到当前文件缓存中)
-jupyter快捷操作:
-插入cell a,b 上插,下插
-删除cell x
-执行cell shift+enter
-切换cell模式 m,y 切 markdown,切code
-切换成编辑模式 代码左侧双击
-执行结果收回 结果左侧双击
-打开帮助文档 shift+tab 调用方法时不知道方法用法
-自动补全 tab
-查看快捷键 空白区域左键+h
原文件可导出为html File--DownLoad as--html一般情况下不要导出,会造成图片缺失
爬虫:编写程序模拟浏览器上网爬取数据
分类
-通用爬虫(爬一整张页面源码数据)
-聚焦爬虫(爬取一部分数据,建立在通用爬虫基础上)
-增量式爬虫(监测网站更新情况,以便爬取最新更新出来的数据)
-分布式爬虫(提高爬取效率的终极武器,一般情况不用,因为太快了,会干扰别人网站)
-反爬机制
-作用到门户网站,保护数据
-反反爬策略
-作用到爬虫程序,破解反爬机制
-风险 :-干扰网站的正确运行
- 爬取受法律保护的数据或信息
-如何避免进局子?
-时常优化自己的爬虫程序
-在使用传播自己爬取的数据时,审查自己抓取的内容,如果发现了涉及用户隐私和商业机密内容,注意及时停止爬取或传播
-反爬机制
-robots协议:防君子不防小人,嘿嘿
-纯文本协议,协议规定网站中哪些数据可以被爬取,哪些不可以被爬取
-破解:主观性的不遵从该协议即可
-UA检测:网络后台会检测对应的user-agent,判定当前请求是否异常请求
-破解: UA伪装,即通过抓包工具获取基于浏览器的user-agent值,将其伪装作用到一个字典中,并将该字典作用到请求方法(get,post)的headers参数中
-request模块:爬虫中基于网络请求的一个模块 pip install (需要导入的模块名) -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
-作用:模拟浏览器发出请求
-编码流程:
-1.指定url
-2.发起请求
-3.获取响应数据(爬取到的页面源码数据)
-4.持久化储存
1.爬取搜狗浏览器
import requests
#1.指定url
url = 'https://www.sogou.com/'
#2.发起请求get方法的返回值为请求对象
response = requests.get(url=url)
#3.获取响应数据 .text返回字符串类型的响应数据
page_text = response.text
#4.持久化储存
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
2.-实现简易网页采集器
-基于搜狗针对不同的关键词将其对应的页面数据进行爬取
import requests
keyWord = input('enter a key world:')
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57'
}
# 携带请求参数的url,想要爬取不同关键词对应的页面,需要将url携带参数动态化
# 实现参数动态化:
# 1.携带参数以键值对形式封存到一个字典中
# 2.字典作用到get方法params参数中
# 3.原始携带参数的url需要将参数删除
params ={
'query':keyWord
}
url = 'http://www.sogou.com/web'
# params参数(字典):保存请求时url携带参数,
# 实现了UA伪装
response = requests.get(url = url,params = params,headers = headers)
# 若出现乱码,则修改响应数据的编码格式为utf-8,目前本人没遇到,但是写了肯定没错
response.encoding = 'utf-8'
page_text = response.text
fileName = keyWord + '.html'
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,'爬取完毕!!!')
# 出现问题:异常访问请求(网站后台检测出该次请求是爬虫程序发出,不是浏览器发起的请求都是异常访问请求)
#如何判判定是否浏览器发起的请求(判定请求头中的user-agent) user-agent -- 请求载体的身份标识
#请求载体 : 浏览器(浏览器的身份标识统一固定,身份标识可以从抓包工具中获取)或爬虫程序(身份标识是各自不同的)
、 3.-爬取豆瓣电影的电影详情数据 url:https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action=
-动态加载数据的捕获
-动态加载数据:使用requests模块无法实现每次都可见
原因:有些数据是通过非浏览器地址栏的url请求到的,这些通过其他请求请求到的数据就是动态加载的数据
-如何检测是否存在动态加载数据:基于抓包工具进行局部搜索 找个响应中内容ctrl+f搜索想要爬取数据 0 of 0 即为动态加载数据
-如何捕获动态加载数据:基于抓包工具进行全局搜索(非100%成功) 列表栏单击然后ctrl+f 定位到动态加载数据包可以提取出
-请求的url(去掉问号后内容)
-请求方式
-请求携带的参数
-看到响应数据
import requests
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57'
}
url = 'https://movie.douban.com/j/chart/top_list'
params = {
'type': 13,
'interval_id': '100:90',#评分区间
'action': '',
'start': '0', #从第几部开始取
'limit': '20' #一次取多少部
}
response = requests.get(url = url,params = params,headers = headers)
# .json将获取字符串形式的json数据反序列化字典或者列表
page_text = response.json()
# 解析出电影名称和评分
for movie in page_text:
name =movie['title']
score = movie['score']
print(name,score)






被折叠的 条评论
为什么被折叠?



