admin管理员组文章数量:1570794
Python爬虫第一课:了解爬虫与浏览器原理
fightingoyo 于 2020-02-26 17:55:46 发布 1661 收藏 12 文章标签: python 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn/fightingoyo/article/details/104518754 版权<article class="baidu_pl">
<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-6e43165c0a.css">
<div id="content_views" class="markdown_views prism-atom-one-dark">
<svg xmlns="http://www.w3/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h3><a name="t0"></a><a id="_0"></a>一、浏览器的工作原理</h3>
当我们要将网页的信息保存到本地时,通常是打开网页,然后通过复制网页的文本,接着粘贴到本地
从上图中,只有我们和浏览器。但是实际上还有一方,那就是「服务器」。
- Request
当我们在浏览器中输入一个网址,也叫做URL(Uniform Resource Locator),然后浏览器就会去存储放着这个网址资源文件的服务器获取这个网址的内容,这个过程就叫做「请求」(Request)。 - Response
当服务器收到了我们的「请求」之后,它会把对应的网站数据返回给浏览器,这个过程叫做「响应」(Response)。
所以当你用浏览器去浏览网页的时候,都是浏览器去向服务器请求数据,服务器返回数据给浏览器的这样一个过程。
当浏览器收到服务器返回的数据时,它会先「解析数据」,把数据变成人能看得懂的网页页面。
当我们浏览这个网页的时候,我们会「筛选数据」,找出我们需要的数据,比如说一篇文章、一份论文等。然后我们把这一篇文章,或者是一篇论文保存到本地,这就叫做「存储数据」。
二、爬虫的工作原理
当你要去某个网站批量下载文章,如果单纯的使用浏览器的话,那么你就得打开浏览器,输入网址,页面加载完成后,寻找对应文章,一个一个的去点下载按钮。
如果这个过程使用爬虫来处理,那么爬虫就会代替我们去服务器请求数据,然后爬虫帮我们去解析数据,然后按照我们设定好的规则批量把文章下载下来,存储到特定文件中。
对于爬虫来说,「请求」和「响应」都是去「获取数据」。他们是一个步骤的两个部分。所以把他们统一之后,爬虫的工作原理就是下图:
- 获取数据。爬虫会拿到我们要它去爬的网址,像服务器发出请求,获得服务器返回的数据。
- 解析数据。爬虫会将服务器返回的数据转换成人能看懂的样式。
- 筛选数据。爬虫会从返回的数据中筛选出我们需要的特定数据。
- 存储数据。爬虫会根据我们设定的存储方式,将数据保存下来,方便我们进行后一步的操作。
三、requests库
这是爬虫的第一步:获取数据。
在电脑中安装requests库的方法如下:
- 在Mac电脑里打开终端软件(terminal),输入pip3 install requests,然后点击enter即可;
- Windows电脑里叫命令提示符(cmd),输入pip install requests 即可。
1. requests.get()
import requests
#在使用前需要先通过 import 来引入 requests 库
res = requests.get('URL')
#我们通过调用requests库中的get()方法来获取数据,这个方法需要一个参数,这个参数就是你需要请求的网址。当请求得到「响应」时,服务器返回的数据就被赋值到 res 这个变量上面
- 1
- 2
- 3
- 4
- 案例:使用requests.get()下载《滕王阁序》
import requests
response = requests.get(‘https://xiaoke.kaikeba/example/gexu/tengwanggexu.txt’)
- 1
- 2
- 3
2. response对象
Python是一门面向对象编程的语言,在面向对象的世界中,一切皆可为对象。在这里Response也是一个对象,他有自己的属性和方法。在我们知道一个数据是什么对象的时候,就可以去使用它对应的属性和方法。
刚刚通过requests.get()拿到的就是一个response对象。
import requests
response = requests.get(‘https://xiaoke.kaikeba/example/gexu/tengwanggexu.txt’)
print(type(response)) # 打印response的数据类型
# 输出结果:
<class ‘requests.models.Response’>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
代码运行结果显示,res是一个对象,它是一个requests.models.Response类。
response对象的四大常用属性:
- response.status_code
import requests
response = requests.get(‘https://xiaoke.kaikeba/example/gexu/tengwanggexu.txt’)
print(response.status_code)
# 输出结果:
200
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这段代码把response的status_code打印出来,如果是200,那么就意味着这个请求是成功的。服务器收到了我们的请求,并返回了数据给我们。
- response.content
它保存着服务器返回的数据的二进制内容。
案例:去下载一张周杰伦的图片
import requests
# 发出请求,并把返回的结果放在变量response中
response = requests.get(‘http://b-ssl.duitang/uploads/blog/201501/20/20150120134050_BXihr.jpeg’)
# 把Reponse对象的内容以二进制数据的形式返回
pic = response.content
# 新建了一个文件jay.jpeg,这里的文件没加路径,它会被保存在程序运行的当前目录下
# 图片内容需要以二进制wb读写。
photo = open(‘jay.jpeg’,‘wb’)
# 获取pic的二进制内容
photo.write(pic)
# 关闭文件
photo.close()
# 输出结果为:我们能在本地得到一张周杰伦的图片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- response.text
这个属性其实就是将 response.content 的二进制数据转换为字符串,适用于文字或者是网页源代码的下载.
import requests
# 用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中
response = requests.get(‘https://xiaoke.kaikeba/example/gexu/tengwanggexu.txt’)
# 把Response对象的内容以字符串的形式返回
novel = response.text
# 打印变量novel
print(novel)
# 输出结果为整篇《滕王阁序》
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
import requests
# 用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中
response = requests.get('https://xiaoke.kaikeba/example/gexu/tengwanggexu.txt')
# 把Response对象的内容以字符串的形式返回
novel = response.text
# 将《滕王阁序》保存到本地
with open('滕王阁序.txt','w') as twg:
twg.write(novel)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- response.encoding
import requests
# 用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中
response = requests.get('https://xiaoke.kaikeba/example/gexu/tengwanggexu.txt')
# 把Response对象的内容以字符串的形式返回
response.encoding='gbk'
novel = response.text
print(novel)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
以上经过encoding之后的novel打印出来为一堆乱码。
这是因为所有的文本数据都有编码类型。这篇文章的编码格式原本是’utf-8’。一般来说,requests库会帮我们自动去判断编码类型,不需要手动指定。
但是如果遇到一些需要自己去指定数据的编码类型的情况,就可以使用“response.encoding”去改变“response”拿到的数据的编码类型。我们手动指定了编码类型为‘gbk’而不是‘utf-8’。所以导致了编码类型不一致,出现了乱码!
再将更改为’gbk‘的编码变更回’utf-8’,这样就能正常打印输出了。
import requests
# 用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中
response = requests.get('https://xiaoke.kaikeba/example/gexu/tengwanggexu.txt')
# 把Response对象的内容以字符串的形式返回
response.encoding='gbk'
response.encoding='utf-8'
novel = response.text
print(novel)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
四、总结
-
浏览器工作原理
-
爬虫工作原理
-
爬虫的四个步骤
-
requests库
五、练习
- 获取文章《蜀道难》全部内容,并且打印出全文内容。 文章网址为:https://xiaoke.kaikeba/example/gexu/shudaonan.txt。
import requests
# 使用requests.get()获取数据
response = requests.get(‘https://xiaoke.kaikeba/example/gexu/shudaonan.txt’)
# 打印数据请求的状态
print(response.status_code)
# 将返回的数据以text形式赋值给变量
article = response.text
# 打印articel
print(article)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 将《蜀道难》存储到本地
import requests
# 使用requests.get()获取数据
response = requests.get(‘https://xiaoke.kaikeba/example/gexu/shudaonan.txt’)
# 打印数据请求的状态
print(response.status_code)
# 将返回的数据以text形式赋值给变量
article = response.text
# 创建"蜀道难.txt"的文件,并以写入模式打开
sdn = open(‘蜀道难.txt’,‘w’)
# 将网站返回的内容写入txt文件中
sdn.write(article)
# 关闭文件
sdn.close()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 下载一张彭于晏的图片。图片地址为:https://ss3.bdstatic/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=21565698,717792087&fm=26&gp=0.jpg
import requests
# 使用requests.get()获取数据
response = requests.get(‘https://ss3.bdstatic/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=21565698,717792087&fm=26&gp=0.jpg’)
# 将数据以二进制的形式存储到变量中
pic = response.content
# 以"彭于晏.jpg"创建文件,并以’wb’模式打开
with open(‘彭于晏.jpg’,‘wb’) as myfile:
# 将图片写入文件中
myfile.write(pic)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 5 点赞
- 踩
- 12 收藏
- 打赏
- 1 评论
-
Python爬虫第一课:了解爬虫与浏览器原理
一、浏览器的工作原理当我们要将网页的信息保存到本地时,通常是打开网页,然后通过复制网页的文本,接着粘贴到本地从上图中,只有我们和浏览器。但是实际上还有一方,那就是「服务器」。Request当我们在浏览器中输入一个网址,也叫做URL(Uniform Resource Locator),然后浏览器就会去存储放着这个网址资源文件的服务器获取这个网址的内容,这个过程就叫做「请求」(Request...
复制链接
扫一扫
</div> <div class="share-code-type"><p class="vip" data-type="vip"><span>VIP</span></p><p class="hot" data-type="hot"><span>热门</span></p></div> </div> </li> </ul> </div> <div class="toolbox-right"> </div> </div>
先看后赞,养成习惯。
点赞收藏,人生辉煌。
讲解我们的爬虫之前,先概述关于爬虫的简单概念(毕竟是零基础教程)
爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。
...</div>
</a>
</div>
</div>
Python
爬虫详解(一看就懂)_练习时长六年半的Programmer...
10-11
爬虫简单的来说就是用程序获取网络上数据这个过程的一种名称。
爬虫的
原理 如果要获取网络上数据,我们要给
爬虫一个网址(程序中通常叫URL),
爬虫发送一个HTTP请求给目标网页的服务器,服务器返回数据给客户端(也就是我们的
爬虫),
爬虫再进...
巨细!
Python
爬虫详解(建议收藏)_编程简单学的博客-CSDN...
10-7
在爬取数据过程中所需参考工具如下:
爬虫框架:Scrapy 请求库:requests、selenium 解析库:正则、beautifulsoup、pyquery 存储库:文件、MySQL、Mongodb、Redis…… 需要相关
python资料的可以扫一扫备注【
爬虫】...
Python
爬虫之chrome在
爬虫中的使用
不一样的花朵的博客
09-13
1029
chrome
浏览器使用方法介绍 学习目标
了解 新建隐身窗口的目的
了解 chrome中network的使用
了解 寻找登录接口的方法
1 新建隐身窗口
浏览器中直接打开网站,会自动带上之前网站时保存的cookie,但是在爬虫中首次获取页面是没有携带cookie的,这种情况如何解决呢?
使用隐身窗口,首次打开网站,不会带上cookie,能够观察页面的获取情况,包括对方服务器如何设置cookie在本地
2 chrome中network的更多功能
2.1 Perserve log
默认情况下,页面
第7部将复制的jspath 黏贴到控制台加一个.href(就是下面的代码)这样变得到了一个下载链接
document.querySelector(“#jishu > div > ul > li:nth-child(2) > div > span.xl > a”).href
分析此代码可以看出 li:
f = open(pat…
爬取某网 response= requests.get(“http://www.xxxxx/“)
我们都知道response有 text 和 content 这两个property, 它们都是指响应内容,但是又有区别。我们从doc中可以看到:
text的d…
这是一篇详细介绍Python爬虫入门的教程,从实战出发,适合初学者。读者只需在阅读过程紧跟文章思路,理清相应的实现代码,30 分钟即可学会编写简单的 Python 爬虫。
这篇 Python 爬虫教程主要讲解以下 5 部分内容:
了解网页;
使用 requests 库抓取网站数据;
使用 Beautiful S…
从现在开始,你要去争取属于你的一切,格局、身材、思维、胆识、人脉、能力以及成熟和自信,要有野心,不负众望。
你要知道,有钱能治愈一切自卑,光善良没有用,你得优秀。
藏好软弱,世界大雨滂沱,万物苟且而活,无人会为你背负更多,除了坚强没有退路!
了解新建无痕窗口的目的
了解chrome中network的使用
了解寻找登录接口的方法
一、新建无痕窗口
浏览器中直接打开网站,会自动带上之前网站保存的cookie,但在爬虫中首次获取页面是没有携带cookie的,这种情况就要用到无痕窗口
python 爬虫技术源码_实战|手把手教你用 Python 爬虫(附详细源码) weixin_42548961的博客 01-30 1324 大家好,我是J哥,专注原创,致力于用浅显易懂的语言分享 爬虫、数据分析及可视化等干货,希望人人都能学到新知识。最近J哥做了个 爬虫小项目,感觉还挺适合新手入门的,于是迫不及待想分享给大家。什么是 爬虫?实践来源于理论,做 爬虫前肯定要先 了解相关的规则和 原理,要知道互联网可不是法外之地,你一顿 爬虫骚操作搞不好哪天就...首先,咱先看下 爬虫的定义 :网络 爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经... Linux企业级项目实践之网络 爬虫(2)——网络 爬虫的结构 与工作流程 weixin_30535843的博客 08-28 72 网络 爬虫是捜索引擎抓取系统的重要组成部分。 爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。一个通用的网络 爬虫的框架如图所示 :网络 爬虫的基本工作流程如下 :1.首先选取一部分精心挑选的种子URL;2.将这些URL放入待抓取URL队列;3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些U... python 爬虫基础 qq_45586204的博客 04-14 640 python 爬虫获取数据requests 与bs4 import requests#引入requests库 import openpyxl#引入openpyxl库,使用函数创建工作簿url = ‘https://c.y.qq/soso/fcgi-bin/client_search_cp’#要爬取的网址的headers
wb=openpyxl.Workbook()#利用openpyxl.W…
Windows环境下运行,需要在命令提示符内运行代码:pip install bs4
MacOS环境下需要输入pip3 install BeautifulSoup4
requests库帮我们搞定了爬虫第1步——获取数据。
HTML知识,则有助于我们解析和提取网页源代码中的数据。
本次,则掌握如何使用BeautifulSoup解析和提取网页中的数据。
…
python爬虫基础01
我们可以通过爬虫来从网站上爬取到自己想要的数据。我使用的爬虫是Pycharm+anaconda。想要爬取数据,首先你得python环境和相关的IDE,这里不多赘述。
python爬虫的原理知识
python爬虫的工作原理:
爬虫的四个步骤:
获取数据。爬虫会拿到我们要它去爬的网址,像服务器发出请求,获得服务器返回的数据。
解析数据。爬虫会将服务器返回的数据转换成人能看懂的样式。
筛选数据。爬虫会.
目录
前言
requests如何解码(encoding)
解决思路
终极工具类
前言
相信大家在使用requests模块在抓取网页时,有时会遇到类似好å�¬ç��é�³ä¹�ï¼�好ç��ç��格式的编码,很是头疼。
如何解决这种问题呢?下面来看一下requests解码方式
requests如何解码(encoding)
直接来看源码:
当调用r.text方法时,其内部是如何实现转码过程的
从图片中可以看出调用流程
1.首先获取self.
“相关推荐”对你有帮助么?
- 非常没帮助
- 没帮助
- 一般
- 有帮助
- 非常有帮助
- 关于我们
- 招贤纳士
- 商务合作
- 寻求报道
- 400-660-0108
- kefu@csdn
- 在线客服
- 工作时间 8:30-22:00
- 公安备案号11010502030143
- 京ICP备19004658号
- 京网文〔2020〕1039-165号
- 经营性网站备案信息
- 北京互联网违法和不良信息举报中心
- 家长监护
- 网络110报警服务
- 中国互联网举报中心
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- 营业执照
- ©1999-2022北京创新乐知网络技术有限公司
-
64
- 原创
-
21万+
- 周排名
-
99万+
- 总排名
-
14万+
- 访问
- 等级
-
2255
- 积分
-
264
- 粉丝
-
167
- 获赞
-
33
- 评论
-
926
- 收藏
热门文章
- Python数据分析第十二课:单变量、双变量及多变量分析图 12088
- Python爬虫第四课:Network、XHR、json 9637
- 解决sns加载数据load_dataset()报错问题 8986
- Pandas中DataFrame重置索引 8972
- Seaborn常见图形绘制(kdeplot、distplot) 7785
最新评论
- Python数据分析补充:数据的分组与汇总(数据透视)
weixin_43840345: pivot_table中有index有几个就对应有几层分类汇总
- Python数据分析补充:数据的分组与汇总(数据透视)
weixin_43840345: 大佬,有没有函数可以是实现多层分类汇总,感觉使用循环叠加会很麻烦
- Python爬虫第四课:Network、XHR、json
爱可劳特: 非常感谢博主,看了真的解了我得问题
- Python数据分析第六课:多层索引
python_xiaofeng: 收藏了。我是需要列索引是多层索引,不过方法是通用的,只是这里的index换成columns就可以了。
- 解决sns加载数据load_dataset()报错问题
m0_51467506: 没有找到seaborn-data文件夹
您愿意向朋友推荐“博客详情页”吗?
- 强烈不推荐
- 不推荐
- 一般般
- 推荐
- 强烈推荐
最新文章
- Pandas中DataFrame重置索引
- 解决sns加载数据load_dataset()报错问题
- Pandas数据处理——map、apply、applymap的异同
最新文章
- Pandas中DataFrame重置索引
- 解决sns加载数据load_dataset()报错问题
- Pandas数据处理——map、apply、applymap的异同
目录
- 一、浏览器的工作原理
- 二、爬虫的工作原理
- 三、requests库
- 四、总结
- 五、练习
- HTML/XML
- objective-c
- Ruby
- PHP
- C
- C++
- JavaScript
- Python
- Java
- CSS
- SQL
- 其它
- 努力的小bai 2020.11.16 举报 回复 赞!这是某课吧的文件吧,刚刚看完了前面 后面要收费就搜到博主的内容了,感谢
</div>
</div>
<div id="pcFlodCommentSideBox" class="pc-flodcomment-sidebox">
<div class="comment-fold-tit"><span id="lookUnFlodComment" class="back"><img src="https://csdnimg/release/blogv2/dist/pc/img/commentArrowLeftWhite.png" alt=""></span>被折叠的 <span class="count">0</span> 条评论
<a href="https://blogdev.blog.csdn/article/details/122245662" class="tip" target="_blank">为什么被折叠?</a>
<a href="https://bbs.csdn/forums/FreeZone" class="park" target="_blank">
<img src="https://csdnimg/release/blogv2/dist/pc/img/iconPark.png">到【灌水乐园】发言</a>
</div>
<div class="comment-fold-content"></div>
<div id="lookBadComment" class="look-bad-comment side-look-comment">
<a class="look-more-comment">查看更多评论<img src="https://i-blog.csdnimg/blog_migrate/40f8f9d2eaf32d4bd8f02cfa391fe484.png" alt=""></a>
</div>
</div>
打赏作者
fightingoyo
你的鼓励将是我创作的最大动力
您的余额不足,请更换扫码支付或充值
打赏作者
实付 元 使用余额支付 点击重新获取 扫码支付版权声明:本文标题:Python爬虫第一课:了解爬虫与浏览器原理 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725796937a1043089.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论