全网最全python爬虫精进

全网最全python爬虫精进4.25(第一天)**第0关认识爬虫**1、初始爬虫爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。2、明晰路径2-1、浏览器工作原理(1)解析数据:当服务器把数据响应给浏览器之后,浏览器并不会直接把数据丢给我们。因为这些数据是用计算机的语言写的,浏览器还要把这些数据翻译成我们能看得懂的内容;(2)提取数据:我们就可以在拿到的数据中,挑选出对我们有用的数据;(3)存储数据:将挑选出来的有用数据保存在某一文件/数据库中。2-2、爬虫工作原理(1)获取数据:爬虫程序会根据

大家好,又见面了,我是你们的朋友全栈君。

个人公众号 yk 坤帝
获取更多学习资料

之前我们讨论了一下请求和响应,接下来几天我们都会讨论对数据的处理。

接触了爬虫这个领域,大家肯定都听过正则表达式的鼎鼎大名,不过今天我们暂时不谈正则,我们先来讨论一下数据的简单处理,为之后的正则表达式做准备。

我们用requests.get或requests.post获取到网页的源码,通过BeautifulSoup解析之后,得到的数据还是可能千奇百怪的,可能多了空格,可能有些内容我们不需要等等,所以我们应该对这些数据进行简单的处理。

首先,来看第一种情况,首尾很多空格的情况,下图是豆瓣电影Top250的图,如果我们想要获取电影上映年份/上映地点/电影类别,实际通过BeautifulSoup解析获取到的数据并不是我们想要的结果。

在这里插入图片描述

movie = ''' 1994 / 美国 / 犯罪 剧情 ''' 
# 我们实际能获取到的数据是这样的,现在我们要去掉首尾多余的空格,可以这么做 movie = movie.strip() 
# strip()表示去除首尾的空格,这个对字符串的处理用得非常多 
# 得到的结果就是1994 / 美国 / 犯罪 剧情

经过strip()处理之后,可以看到得到得结果中仍然还是有空格,这个就可以用replace来替 换掉空格。

个人公众号 yk 坤帝 
获取更多学习资料

movie = ''' 1994 / 美国 / 犯罪 剧情 '''
movie = movie.strip() # 
得到的结果就是1994 / 美国 / 犯罪 剧情 
movie = movie.replace(' ', '') 
# 这一行表示将字符串中的空格替换掉,replace第一个参数表示要替换的字符串,第二个 参数表示要用什么来替换。 
# 得到的结果就是1994/美国/犯罪剧情

经过replace()处理之后,其实得到的数据已经可以了,但是,如果我们想分别提取出上映 年份/上映地点/电影分类呢。

这个时候就用到我们之前用过的split了。

movie = ''' 1994 / 美国 / 犯罪 剧情 ''' 
movie = movie.strip() 
# 得到得结果就是1994 / 美国 / 犯罪 剧情 movie = movie.replace(' ', '') 
# 得到的结果就是1994/美国/犯罪剧情 movie = movie.split('/') 
# 这一行表示将字符串通过/进行分割,得到的是一个列表 
# 得到的结果是['1994', '美国', '犯罪剧情']

通过strip和replace和split就能得到我们想要的结果了,这三种字符串的处理方法会在处理 数据中经常使用。

然后我们来看下第二种情况,是关于URL拼接问题的,假设我们现在要爬取知乎首页的超链 接,然后顺着爬取到的超链接一直深入爬下去,这样就能爬取整个知乎了。

下图是知乎首页其中一个问题的URL,可以发现这个URL并不完整,需要拼接上当前的域名 才能构成一个完整的URL。

我们当然可以用https://www.zhihu.com和这个URL拼接起来,但是这样又有一个问题,我 们是想要获取到知乎的所有URL,有的URL是带了https://www.zhihu.com的,这样再拼接 一下,就容易出错,所以我们需要预先处理一下。这就需要用到startswith方法了。

在这里插入图片描述

个人公众号 yk 坤帝 
获取更多学习资料

origin_url = 'https://www.zhihu.com' 

url_list = ['/question/36539555/answer/595275293', '/question/308663552/a nswer/577063117', 'https://www.zhihu.com/special/20743868'] 

for i in range(len(url_list)):
	if not url_list[i].startswith('http'):
	# 这一行表示如果url_list[i]不是以http开头的话,那么就执行if内部的语句 
	url_list[i] = origin_url + url_list[i]
	print(url_list) 
	 
	# 得到的最终结果是['https://www.zhihu.com/question/36539555/answer/5952752 93', 'https://www.zhihu.com/question/308663552/answer/577063117', 'https:// www.zhihu.com/special/20743868']

通过startswith提前判断一下,就能够得到我们想要的结果了。当然有startswith,自然而 然会有endswith,同样举个例子来看。

个人公众号 yk 坤帝 
获取更多学习资料

url_list = ['https://pic2.zhimg.com/50/v25502c54842dceeb2e8901e884407a7fd_fhd.jpg', 'https://www.zhihu.com/special/20743868']

for url in url_list:
	if url.endswith('jpg'):
	
	# 这一行表示如果url是以jpg结尾的话,就执行if内部的语句
		url_list.remove(url) 6 print(url_list) 
		 # 最终结果是['https://www.zhihu.com/special/20743868']

通过startswith和endswith可以用来过滤我们不想要的字符串,并对其进行操作。

最后,我们再来谈一个join方法,这个方法是用来拼接一个序列(列表/元组等)的值的, 将一个序列转换一个字符串。

下图是豆瓣中一本书的详情页,每本书都有他的标签,有的时候为了方便存储,我们需要将 这些标签连起来组成一个字符串,我们就可以用join来操作了。

在这里插入图片描述

# 上图我们用爬虫去爬取书籍的标签的话,得到的是tag这样的一个列表 
tag = ['文学', '短篇小说', '小说', '先锋文学'] 
tag = '-'.join(tag) 
# 这一行表示用'-'符号将tag这个列表中的每个值连接起来,得到的是一个字符串 
# 最终结果是'文学-短篇小说-小说-先锋文学'

好了,今天的分享本来就到这里结束了,但还是忍不住要插一个列表的去重,因为真的经常 会用到。

有这样一个需求,一本书总共有600000个英文单词,保存在了一个列表中,现在想要统计 如果想要阅读这本书,需要多少得词汇量,那么我们面对得问题就是去重。

我们直接看代码:

个人公众号 yk 坤帝 
获取更多学习资料

# 实现功能:将列表中相同的元素去重,统计书籍词汇量 

content = ['Whatever', 'is', 'worth', 'doing', 
'is', 'worth', 'doing', 'well'] 
new_content = set(content) 
# 这一步是将列表转换成集合,就去重成功了,因为集合内的元素是不能重复的,但它是无 序的

new_content = list(new_content) 
# 这一步是将上一步得到的集合转换成一个列表,这样就得到了最终结果列表了 print(new_content) 
# 得到的结果是['worth', 'Whatever', 'is', 'doing', 'well']

print(len(new_content)) 
# 得到的结果是5,说明这本书的词汇量是5个

至此,我们总共讨论了字符串的6种常用方法,分别是strip、replace、split、startswith、 endswith、join,以及列表的去重。 明天我们开始来讨论正则表达式,大家加油。

个人公众号 yk 坤帝
获取更多学习资料

**

第0关 认识爬虫

**
1、初始爬虫
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。
2、明晰路径
2-1、浏览器工作原理

(1)解析数据:当服务器把数据响应给浏览器之后,浏览器并不会直接把数据丢给我们。因为这些数据是用计算机的语言写的,浏览器还要把这些数据翻译成我们能看得懂的内容;
(2)提取数据:我们就可以在拿到的数据中,挑选出对我们有用的数据;
(3)存储数据:将挑选出来的有用数据保存在某一文件/数据库中。
2-2、爬虫工作原理

(1)获取数据:爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据;
(2)解析数据:爬虫程序会把服务器返回的数据解析成我们能读懂的格式;
(3)提取数据:爬虫程序再从中提取出我们需要的数据;
(4)储存数据:爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。
3、体验爬虫
3-1、requests.get()
①、安装 requests 库
Mac电脑里打开终端软件(terminal),输入pip3 install requests,然后点击 enter;
Windows电脑里叫命令提示符(cmd),输入pip install requests 。
提示:往后安装其他库时与上方类似,pip install 模块名

②、requests 库作用
requests 库可以帮我们下载网页源代码、文本、图片,甚至是音频。其实,“下载”本质上是向服务器发送请求并得到响应。

③、requests 库使用
选择语言
res = requests.get(‘URL’)
requests.get 是在调用requests库中的get()方法,它向服务器发送了一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。我们把这个响应返回的结果赋值在变量res上。

3-2、Response对象的常用属性

①、response.status_code
打印 response 的响应状态码,以检查请求是否成功。

②、response.content
把 Response 对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载。

③、response.text
把 Response 对象的内容以字符串的形式返回,适用于文字、网页源代码的下载。

④、response.encoding
能帮我们定义Response对象的编码。(遇上文本的乱码问题,才考虑用res.encoding)
3-3、汇总图解

4、爬虫伦理
4-1、Robots 协议
Robots 协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(Robots exclusion protocol),这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。
4-2、协议查看
(1)在网站的域名后加上/robots.txt就可以了。如淘宝的robots协议 ( http://www.taobao.com/robots.txt);
(2)协议里最常出现的英文是Allow和Disallow,Allow代表可以被访问,Disallow代表禁止被访问。
目录
1、初始爬虫
2、明晰路径
2-1、浏览器工作原理
2-2、爬虫工作原理
3、体验爬虫
3-1、requests.get()
3-2、Response对象的常用属性
3-3、汇总图解
4、爬虫伦理
4-1、Robots 协议
4-2、协议查看

程中我们的示范,会用谷歌浏览器(Chrome)进行演示,强烈推荐你也使用它。
如果你还没有谷歌浏览器(Chrome),打开下面的链接,就可以下载Chrome的安装包了,Windows和Mac都有:谷歌浏览器(Chrome)安装教程(https://www.google.cn/intl/zh-CN/chrome/)

初识爬虫
什么是爬虫?
到底什么是爬虫呢?

爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。

爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?深圳的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。

这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。

以百度为例,你在搜索的时候仔细看,会发现每个搜索结果下面都有一个百度快照。

在这里插入图片描述

点击百度快照,你会发现网址的开头有baidu这个词,也就是说这个网页属于百度。

在这里插入图片描述
这是因为,百度这家公司会源源不断地把千千万万个网站爬取下来,存储在自己的服务器上。你在百度搜索的本质就是在它的服务器上搜索信息,你搜索到的结果是一些超链接,在超链接跳转之后你就可以访问其它网站了。

爬虫还让这些搜索巨头有机会朝着人工智能的未来迈进,因为人工智能的发展离不开海量的数据。而每天使用这些搜索网站的用户都是数以亿计的,产生的数据自然也是难以计量的。

从搜索巨头到人工智能巨头,这是一条波澜壮阔的路。而我们应该看到,事情的源头,却是我们今日所书写的“爬虫”。

我们会通过一个网站:人人都是蜘蛛侠 来学习浏览器的工作原理。(这是我们自己搭建的网站,方便教学和实操)

在这里插入图片描述
在这里插入图片描述
首先,我们在浏览器的地址栏输入网址(也可以叫URL)。然后,浏览器向服务器传达了我们想访问某个网页的需求,这个过程就叫做【请求】。

紧接着,服务器把你想要的网站数据发送给浏览器,这个过程叫做【响应】。

所以浏览器和服务器之间,先请求,后响应,有这么一层关系。

爬虫的工作原理
在这里插入图片描述
爬虫学习大纲
在这里插入图片描述

0关,初识爬虫,你会了解爬虫的工作原理,写出一个简单的爬虫程序,学会爬虫的第0步:获取数据。

icon
第1关,你将会快速入门HTML基础知识,达到读懂和修改HTML文档的水平。有了这些基础,你才能去学习如何解析数据和提取数据。

icon
第2345关,我会教你爬虫的第1和第2步:解析数据和提取数据。同时,你还会学到两种不同的发起请求的方式。

icon
在第6关,你将学会存储数据,即把目标数据写入到本地的Excel表格中。到此,你就学会了爬虫完整的四个步骤,掌握了最基本的爬虫技能啦。

icon
第7关,我们一起做一个项目,爬取一个知乎大v的所有文章,并且存到Excel中。以此,我们巩固和复习了0-6关的所有知识。第7关会是一个分水岭,后面关卡的进阶知识都建立在前7关的基础上。

icon
第8关,学会cookies,就可以让浏览器记住你,你们可以更方便地长期保持联系,而不是在一次见面之后就相忘于江湖。

icon
第9关,学习控制浏览器,来应对爬虫中一些更复杂的情况。第10关,你的爬虫会变得更自动化,爬虫程序不但可以定时工作,还可以把爬取结果传递给你。

icon
接下来的4关,你将学会更高效更强大的爬虫方法,让爬虫技能升级。

icon
第15关毕业总结,就到了告别的时刻了。这时你也学成出师,可以用爬虫知识去做自己想做的事情了,让爬虫为你消灭重复劳动,高效获取信息,创造出更多价值。

icon
以上,就是爬虫学习大纲。
# 引入requests库
import requests

# requests.get是在调用requests库中的get()方法,它向服务器发送了一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。
# 我们把这个响应返回的结果赋值给变量res
res = requests.get('URL')

在这里插入图片描述
现在,我们试着用requests.get()来下载一个小说——《三国演义》:
在这里插入图片描述

# 来吧,写代码吧 
import requests
url = 'https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md'
response = requests.get(url)

在这里插入图片描述

个人公众号  yk 坤帝
后台回复 scrapy 获取整理资源
import requests 

res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png') 
# 打印变量res的响应状态码,以检查请求是否成功
print(res.status_code)

icon
第5行代码是在打印res的响应状态码,它可以用来检查我们的requests请求是否得到了成功的响应。我们看到终端结果显示了200,这个数字代表服务器同意了请求,并返回了数据给我们。

icon
除了200,我们还可能收到其他的状态码。下面有一个表格,供你参考不同的状态码代表什么,但不需要记住它们,在遇到问题的时候查询就好。

在这里插入图片描述
icon
response.status_code是一个很常用的属性,在我们之后的爬虫代码中也将多次出现。
在这里插入图片描述
icon
接着的属性是response.content,它能把Response对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载,看个例子你就懂了。

icon
假如我们想下载这张图片,它的URL是:https://res.pandateacher.com/2018-12-18-10-43-07.png

在这里插入图片描述

# 引入requests库
import requests

# 发出请求,并把返回的结果放在变量res中
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
# 把Reponse对象的内容以二进制数据的形式返回
pic = res.content
# 新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
# 图片内容需要以二进制wb读写。你在学习open()函数时接触过它。
photo = open('ppt.jpg','wb')
# 获取pic的二进制内容
photo.write(pic) 
# 关闭文件
photo.close()

icon
这样,我们的图片就下载成功啦~你也可以在本地运行这个程序。

icon
讲完了response.content,继续看response.text,这个属性可以把Response对象的内容以字符串的形式返回,适用于文字、网页源代码的下载。

icon
举个例子,我们还是来下载小说《三国演义》的第一回。

# 引用requests库
import requests

# 下载《三国演义》第一回,我们得到一个对象,它被命名为res
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
# 把Response对象的内容以字符串的形式返回
novel=res.text
# 现在,可以打印小说了,但考虑到整章太长,只输出800字看看就好。在关于列表的知识那里,你学过[:800]的用法。
print(novel[:800])

icon
之后,我们就可以用通过读写文件把小说保存到本地了。这是Python基础语法知识,你应该已经学会了。下面直接给出做法,你也可以在自己的本地电脑上做尝试练习。

# 引入requests库
import requests
#下载《三国演义》第一回,我们得到一个对象,它被命名为res
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
# 把Response对象的内容以字符串的形式返回
novel = res.text
# 创建一个名为《三国演义》的txt文档,指针放在文件末尾,追加内容
k = open('《三国演义》.txt','a+')
# 写进文件中 
k.write(novel)
# 关闭文档 
k.close()

在这里插入图片描述

爬虫伦理
icon
就像是两个人在来来往往的相处中,会考虑对方的感受;在互联网的世界中,我们也要考虑一下服务器对爬虫的感受是怎样的。

icon
我们说过,服务器其实就是一个超级电脑,拥有这个服务器的公司,对爬虫其实也有明确的态度。

icon
通常情况下,服务器不太会在意小爬虫,但是,服务器会拒绝频率很高的大型爬虫和恶意爬虫,因为这会给服务器带来极大的压力或伤害。

icon
不过,服务器在通常情况下,对搜索引擎是欢迎的态度(刚刚讲过,谷歌和百度的核心技术之一就是爬虫)。当然,这是有条件的,通常这些条件会写在robots协议里。

icon
robots协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(robots exclusion protocol),这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。

icon
我们使用robots协议的场景通常是:看到想获取的内容后,检查一下网站是否允许爬取。因此我们只需要能找到、简单读懂robots协议就足够了。

icon
我们截取了一部分淘宝的robots协议,可以看到淘宝对百度和谷歌这两个爬虫的访问规定,以及对其它爬虫的规定。

icon
有的同学可能就要问了:“域名是什么?域名和URL(网址)有什么关系?”很敏锐哟!

icon
我们前面说过,如果把一个网页类比为一幢房子,URL指示了网页的地址,就像房子在地球上的详细到某某街道某某号的具体地址,那么域名就像房子所在的国家,指示了网站的地址。

icon
如果我们看到一个网页,想爬上面的内容,怎么找到它的URL我们刚刚学过了,如果网页的URL是https://pypi.org/project/requests/,那么,此网站的域名是pypi.org;如果网页的URL是http://cn.python-requests.org/zh_CN/latest/,那么网站的域名是cn.python-requests.org。

icon
我们再来看一个,如果网页的URL是https://www.taobao.com/markets/3c/tbdc?spm=a21bo.2017.201867-main.11.5af911d9VV8EyS,那么网站的域名是www.taobao.com。


单选题
看懂了么?我们来试一次,某网页的网址是https://www.bilibili.com/v/douga/?spm_id_from=333.851.b_7072696d6172794368616e6e656c4d656e75.1,那么网站的域名是?

答对了!

icon
没错,你已经找到了规律!

icon
有个课后思考交给你:域名中会藏着网站的国籍或功能领域等信息,那么.cn,.com,.gov结尾的域名分别代表了什么?
icon
来看一个实例:我们截取了一部分淘宝的robots协议 (

http://www.taobao.com/robots.txt)。在截取的部分,可以看到淘宝对百度和谷歌这两个爬虫的访问规定,以及对其它爬虫的规定。

User-agent:  Baiduspider # 百度爬虫
Allow:  /article # 允许访问 article 
Allow:  /oshtml # 允许访问 oshtml 
Allow:  /ershou # 允许访问 ershou 
Allow: /$ # 允许访问根目录,即淘宝主页
Disallow:  /product/ # 禁止访问product文件夹下面的所有文件,但是product文件夹本身允许被访问
Disallow:  / # 禁止访问除 Allow 规定页面之外的其他所有页面
​
User-Agent:  Googlebot # 谷歌爬虫
Allow:  /article
Allow:  /oshtml
Allow:  /product # 允许访问product文件夹及product文件夹下面的所有文件
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  / # 禁止访问除 Allow 规定页面之外的其他所有页面


…… # 文件太长,省略了对其它爬虫的规定,想看全文的话,点击上面的链接

User-Agent: * # 其他爬虫
Disallow: / # 禁止访问所有页面
icon
可以看出robots协议是“分段”的吗?每个段落都含有以下两种字段:一种是User-agent:,另一种是Allow:或Disallow:。

icon
User-agent表示的是爬虫类型,上面的示例代码注释了“百度爬虫”和“谷歌爬虫”,我们自己写的爬虫一般要看User-Agent: *,*指向所有未被明确提及的爬虫。

icon
Allow代表允许被访问,Disallow代表禁止被访问。字段对应的值都含有路径分隔符/,限制了哪些或哪一层目录的内容是允许或者禁止被访问的。可以对比上述百度爬虫Disallow: /product/和谷歌爬虫Allow: /product的注释行理解一下。

练习介绍

要求:
获取文章《HTTP状态响应码》全部内容,并且打印出全文内容。

目的:
练习获取网上的文本文件。
题目要求:获取文章《HTTP状态响应码》全部内容,并且打印出全文内容。

获取数据:

文本URL:
https://localprod.pandateacher.com/python-manuscript/crawler-html/exercise/HTTP%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E7%A0%81.md

首先调用requests库,使用requests.get(‘URL’)获取文件,返回的是Response对象。

然后需要把Response对象用合适的数据形式返回。

存储数据:

存储文件的三个步骤:打开文件,存储文件,关闭文件。

import requests

destnation_url = 'https://localprod.pandateacher.com/python-manuscript/crawler-html/exercise/HTTP%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E7%A0%81.md'
res = requests.get (destnation_url) 
print(res.status_code) # 查看响应码
article=res.text # 把Response对象的内容以字符串的形式返回
print(article)

返回结果如下

# HTTP响应状态码


## 1xx:临时响应
#### 表示临时响应并需要请求者继续执行操作的状态代码。

100   **继续**请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 
101   **切换协议**请求者已要求服务器切换协议,服务器已确认并准备切换。

---

## 2xx : 成功
#### 表示成功处理了请求的状态代码。

200   **成功**  服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201   **已创建**  请求成功并且服务器创建了新的资源。
202   **已接受**  服务器已接受请求,但尚未处理。
203   **非授权信息**  服务器已成功处理了请求,但返回的信息可能来自另一来源。
204   **无内容**  服务器成功处理了请求,但没有返回任何内容。
205   **重置内容**服务器成功处理了请求,但没有返回 任何内容。
206   **部分内容**  服å¡器成功处理了部分 GET 请求。

---

## 3xx : 重定向
#### 表示要完成请求,需要进一步操作。通常,以下状态代码用来重定向。

300   **多种选择**  针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301   **永久移动**  请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302   **临时移动**  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303   **查看其他位置**请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

304   **未修改**自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
305   **使用代理**请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307   **临时重定向**  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

---

## 4xx:请求错误
### 以下状态代码表示请求可能出错,妨碍了服务器的处理。
 
400   **错误请求**服务器不理解请求的语法。
401   **未授权**请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403   **禁止**服务器拒绝请求。
404   **未找到**服务器找不到请求的网页。
405   **方法禁用**禁用请求中指定的方法。
406   **不接受**无法使用请求的内容特性响应请求的网页。
407   **需要代理授权**此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408   **请求超时**  服务器等候请求时发生超时。
409   **冲突**  服务器在完成请求时发生冲突。服务器必须在响应中包含有关å²突的信息。
410   **已删除**  如果请求的资源已永久删除,服务器就会返回此响应。
411   **需要有效长度**服务器不接受不含有效内容长度标头字段的请求。
412   **未满足前提条件**服务器未满足请求者在请求中设置的其中一个前提条件。
413   **请求实体过大**服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414   **请求的 URI 过长**请求的 URI(通常为网址)过长,服务器无法处理。
415   **不支持的媒体类型**请求的格式不受请求页面的支持。
416   **请求范围不符合要求**如果页面无法提供请求的范围,则服务器会返回此状态代码。
417   **未满足期望值**服务器未满足"期望"请求标头字段的要求。

---

## 5xx:服务器错误
### 以下状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

500   **服务器内部错误**  服务器遇到错误,无法完成请求。
501   **尚未实施**服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502   **错误网关**服务器作为网关或代理,从上游服务器收到无效响应。
503   **服务不可用**服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504   **网关超时**  服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505   **HTTP 版本不受支持**服务器不支持请求中所用的 HTTP 协议版本。



个人公众号  yk 坤帝
后台回复 scrapy 获取整理资源

练习介绍
要求:
获取下面的图片,并且储存图片。

在这里插入图片描述

目的:
练习获取网上的图片文件。

个人公众号  yk 坤帝
后台回复 scrapy 获取整理资源
import requests

# 发出请求,并把返回的结果放在变量res中
res = requests.get('https://res.pandateacher.com/2019-01-12-15-29-33.png')
# 把Reponse对象的内容以二进制数据的形式返回
pic=res.content
# 新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
# 图片内容需要以二进制wb读写。你在学习open()函数时接触过它。
photo = open('spider.jpg','wb')
# 获取pic的二进制内容
photo.write(pic) 
# 关闭文件
photo.close()

练习介绍
题目要求:

获取下面的音乐,并且储存它,然后请刷新页面,这样你就可以在【文件】内看到它。音乐URL:

获取数据
音乐URL:https://static.pandateacher.com/Over%20The%20Rainbow.mp3

首先调用requests库,使用requests.get(‘URL’)获取文件,返回的是Response对象。

然后需要把Response对象用合适的数据形式返回。

存储文件
存储文件的三个步骤:打开文件,存储文件,关闭文件。

import requests

# 发出请求,并把返回的结果放在变量res中
res = requests.get('https://static.pandateacher.com/Over%20The%20Rainbow.mp3')
# 把Reponse对象的内容以二进制数据的形式返回
mp3 = res.content
# 新建了一个文件rainbow.mp3,这里的文件没加路径,它会被保存在程序运行的当前目录下。
# 音频内容需要以二进制wb读写。你在学习open()函数时接触过它。
music = open('rainbow.mp3','wb')
# 写入mp3的二进制内容
music.write(mp3) 
# 关闭文件
music.close()

1.python第三方模块下载
Windows:
windows系统
进入命令行窗口 win+r

1.pip install 模块 国外镜像源 下载速度慢

2.pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 模块 国内清华镜像源 下载速度快

3.http://pypi.douban.com/simple/ 模块 国内豆瓣镜像源 下载速度快

4.https://pypi.mirrors.ustc.edu.cn/simple/ 模块 阿里云

5.https://pypi.tuna.tsinghua.edu.cn/simple/ 中科大

如果你那儿的网络总是不给力,又不想每次手动添加,可以加在配置文件里一劳永逸。

2.scrapy框架爬虫

1.定位到相应文件夹 Windows: windows系统 进入命令行窗口 win+r

2.scrapy startproject 项目

3.scrapy genspider 名称 www.xxx.com

基于CrawlSpider爬虫父类的创建
scrapy genspider -t crawl 名称 www.xxx.com

分布式爬虫:
  执行工程 scrapy runspider xxx.py

3.python使用matplotlib模块绘制折线图相关参数

在这里插入图片描述
在这里插入图片描述
4.numpy读取本地数据

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

在这里插入图片描述
5.lambda函数用法

个人公众号 yk 坤帝
学习更多硬核知识。

f = open('命运1.txt','r')
txt = f.read()
d = { 
   }
for i in txt:
    if i not in ',。?!—《》:‘’“”()□':    
        d[i] = d.get(i,0) + 1
ls = list(d.items())
ls.sort(key=lambda x:x[1],reverse = True)
print("{}:{}".format(ls[0][0],ls[0][1]))

f.close()

命运1.txt文件在我的资源中下载

6. list,sort,lambda模块区别联系

list.sort(key=lambda x:x[1],reverse = True)

首先说一下 sort函数

sort函数是一个专门对列表进行排序的一个函数,下面是官方的解释
在这里插入图片描述

我的理解是,按照列表维度(指数组中第0,1,2个元素)进行排序,默认为从小到大,’reverse=True’则意味着从大到小。

关于维度,形象地理解如下:

list = [('i','he',5), ('q', 'I', 3), ('p', 'they', 1)]中,

x:x[0]中,
x表示列表中的元素,
x[0]表示列表中的元素的索引为0的元素
key=lambda x:x[0]
相当于对’i’, ‘q’, ‘p’进行排序,
其中x可以换成其他变量。x:x[1]
***

那这个key=lambda x: x[1] 是什么意思呢? 其实可以把lambda看作一个隐函数,在这里可以不用管它,记得有这个就可以,

后面的x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。

7.爬虫requests模块解析

# 调用requests模块
个人公众号 yk 坤帝
后台回复 面试项目整理 获取整理资源

import requests
# 获取网页源代码,得到的res是response对象。
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html') 
# 检测请求是否正确响应
print(res.status_code) 
res.encoding=res.apparent_encoding
# 正确响应,进行读写操作
# 新建一个名为book的html文档,你看到这里的文件没加路径,它会被保存在程序运行的当前目录下。
# 字符串需要以w读写。你在学习open()函数时接触过它。
if res.status_code == 200:
    file = open('book1.html','wb')
    # res.text是字符串格式,把它写入文件内。
    file.write(res.content) 
    # 关闭文件
    file.close() 

8.爬虫bs4,BeautifulSoup解析

from bs4 import BeautifulSoup

res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spder-men0.0.html')

print(res.status_code)
soup = BeautifulSoup(res.content,'html.parser')
#soup输出的内容于text一样,但格式不一样
#(soup)
item = soup.find('div')

#print(type(item))

#print(item)

items = soup.find_all('div')

#print(items)

res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')

soup = BeautifulSoup(res.text,'html.parser')

items = soup.find_all('div',class_='books')

#print(items)

#print(type(items))

for item in items:

    #print('想找的数据都包含在这里了:\n',item)

#print(type(item))
    kind = item.find('h2')
    title = item.find(class_='title')
    bref = item.find(class_='info')
    print(kind.text,'\n',title.text,'\n',title['href'],'\n',bref.text)
    print(type(kind),type(title),type(bref))

9.模拟器打开开发者模式

模拟器打开开发者模式

appium连接模拟器进行自动化测试时,需要使用adb来连接模拟器,具体操作步骤:

  1. 打开模拟器

  2. 在cmd中输入:adb devices

此时出现的列表中找不到对应的安卓设备

  1. 在cmd中输入:adb connect 127.0.0.1:5555(5555为模拟器对应的端口号,此处为雷电模拟器)

  2. 再次输入:adb devices,列表中找到对应模拟器表面连接成功

下面是其他几款流行的模拟器单位端口:

adb 命令连接模拟器
天天模拟器端口 6555
adb connect 127.0.0.1:6555

海马模拟器
adb connect 127.0.0.1:26944

mumu模拟器 6.0
adb connect 127.0.0.1:7555

逍遥游模拟器
adb connect 127.0.0.1:21503

夜神模拟器
adb connect 127.0.0.1:62001

10. d.get()用法解析

d[i] = d.get(i,0)+1
f = open('命运.txt','r')
txt = f.read()
d = { 
   }
for i in txt:
    if i not in '\n':
        d[i] = d.get(i,0)+1
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse=True) # 此行可以按照词频由高到低排序
for k in range(10):
    print(ls[k][0],end = '')

f.close()

d[i] = d.get(i,0)+1
d[i]代表字典d中符号i对应的键值
d.get()有两个参数时,理解为当i对应键值不存在时返回第二个参数作为键值,在本例中代表当i键值不存在时,返回0为i的键值,加1代表每次遍历到i键值加一,第二次遍历到i时,d.get(i,0)返回1,以此类推。
第三次遍历到i时,d.get(i,0)返回2,对应字典中i的键值

11.jieba模块用法

import jieba
s = input("请输入一个字符串")
n = len(s) 
m = len(jieba.lcut(s))
print("中文字符数为{},中文词语数为{}。".format(n, m))
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140528.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号