爬虫 1、用Anaconda的 jupyter notebook 写爬虫
- Anaconda是一个集成环境(基于机器学习和数据分析的开发环境)
- 基于浏览器的一种可视化开发工具:jupyter notebook
- 可以在指定目录的终端中录入jupyter notebook指令,然后启动服务。
- cell是分为不同模式的:
- Code:编写python代码
- markDown:编写笔记
- 快捷键:
- 添加cell:a,b
- 删除cell:x
- 执行:shift+enter
- tab:
- 切换cell的模式:
- m ==>markdowm模式
- y ==》代码模式
- 打开帮助文档:shift+tab
环境变量配置
在某个文件夹下shift+右键 打开powershell 输入jupyter notebook打开 web ,即当前目录是web 的根目录
-
-
规避风险:
-
严格遵守网站设置的robots协议;
-
在规避反爬虫措施的同时,需要优化自己的代码,避免干扰被访问网站的正常运行;
-
在使用、传播抓取到的信息时,应审查所抓取的内容,如发现属于用户的个人信息、隐私或者他人的商业秘密的,应及时停止并删除。
-
-
-
robots协议:文本协议
-
- www.xx.com/robots.txt 查看
- 特性:防君子不防小人的文本协议
二、requtest
- 什么是requests模块?
- Python中封装好的一个基于网络请求的模块。
- requests模块的作用?
- 用来模拟浏览器发请求
- requests模块的环境安装:
- pip install requests
- requests模块的编码流程:
- 1.指定url
- 2.发起请求
- 3.获取响应数据
- 4.持久化存储

import requests #1.指定url url = 'https://www.sogou.com/' #2.请求发送get:get返回值是一个响应对象 response = requests.get(url=url) #3.获取响应数据 page_text = response.text #返回的是字符串形式的响应数据 #4.持久化存储 with open('sogou.html','w',encoding='utf-8') as fp: fp.write(page_text)

#需要让url携带的参数动态化 url = 'https://www.sogou.com/web' #实现参数动态化 wd = input('enter a key:') params = { 'query':wd } #在请求中需要将请求参数对应的字典作用到params这个get方法的参数中 response = requests.get(url=url,params=params) page_text = response.text fileName = wd+'.html' with open(fileName,'w',encoding='utf-8') as fp: fp.write(page_text)
- 上述代码执行后发现:
- 1.出现了乱码
- 2.数据量级不对

url = 'https://www.sogou.com/web' #实现参数动态化 wd = input('enter a key:') params = { 'query':wd } #在请求中需要将请求参数对应的字典作用到params这个get方法的参数中 response = requests.get(url=url,params=params) response.encoding = 'utf-8' #修改响应数据的编码格式 page_text = response.text fileName = wd+'.html' with open(fileName,'w',encoding='utf-8') as fp: fp.write(page_text)
- UA检测:门户网站通过检测请求载体的身份标识判定改请求是否为爬虫发起的请求
- UA伪装:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
- user-agent

url = 'https://www.sogou.com/web' #实现参数动态化 wd = input('enter a key:') params = { 'query':wd } headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36' } #在请求中需要将请求参数对应的字典作用到params这个get方法的参数中 response = requests.get(url=url,params=params,headers=headers) response.encoding = 'utf-8' #修改响应数据的编码格式 page_text = response.text fileName = wd+'.html' with open(fileName,'w',encoding='utf-8') as fp: fp.write(page_text)
三 ajax
#爬取的是豆瓣电影中电影的详情数据
https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action=
#分析:
当滚动条被滑动到页面底部的时候,当前页面发生了局部刷新(ajax的请求)
动态加载的页面数据
- 是通过另一个单独的请求请求到的数据

url = 'https://movie.douban.com/j/chart/top_list' start = input('您想从第几部电影开始获取:') limit = input('您想获取多少电影数据:') # url 中的参数 dic = { 'type': '13', 'interval_id': '100:90', 'action': '', 'start': start, 'limit': limit, } response = requests.get(url=url,params=dic,headers=headers) page_text = response.json() #json()返回的是序列化好的实例对象 for dic in page_text: print(dic['title']+':'+dic['score'])

#肯德基餐厅查询http://www.kfc.com.cn/kfccda/storelist/index.aspx url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' for page in range(1,5): data = { 'cname': '', 'pid': '', 'keyword': '西安', 'pageIndex': str(page), 'pageSize': '10', } response = requests.post(url=url,headers=headers,data=data) print(response.json())
如何检测页面中是否存在动态加载的数据?
- 基于抓包工具实现
- 先捕获网站请求后所有的数据包
- 在数据包中定位到地址栏所对应请求的数据包,在response选项卡对应的数据中进行局部搜索(页面中的某一组内容)
- 可以搜索到:爬取的数据不是动态加载的
- 没有搜索到:爬取的数据是动态加载的
- 如何定位动态加载的数据在哪个数据包中呢?
- 进行全局搜索
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构