python(二十四)

您所在的位置:网站首页 python获取浏览器版本 python(二十四)

python(二十四)

2023-07-27 23:25| 来源: 网络整理| 查看: 265

 

目录

爬虫

使用python写爬虫需要的技能

通用爬虫缺点

urllib爬取网页

返回状态码response.getcode()

解码编码

模拟浏览器

设置超时

HTTP请求:进行客户端与服务端之间的消息传递时使用

爬虫

网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则进行,这些规则称之为网络爬虫算法。使用Python可以很方便地写出爬虫程序,进行互联网信息的自动化检索

爬虫本质上是一段程序(一个脚本)能帮我们自动批量采集我们需要的文本信息、图片等资源模拟浏览器的自动浏览网页(99%)

之前我也写了有关爬虫的博客,可以参考:

python爬虫爬网络小说 https://blog.csdn.net/qq_36171287/article/details/90180862

python爬虫练习爬取信息 https://blog.csdn.net/qq_36171287/article/details/90575007

python爬虫实验浏览量——凉凉 https://blog.csdn.net/qq_36171287/article/details/91352388

爬虫的设计:

首先要确定爬取网页的URL地址通过HTTP协议来获取对应的HTML页面提取HTML页面中有用的数据

使用python写爬虫需要的技能 python基本语法如何抓取页面:HTTP请求处理,ullib处理后的请求可以模拟浏览器发送请求,获取服务器响应的文件解析服务器响应内容:re、xpath、 BeautifulSoup4、 jsonpath、 pyquery目的是使用某种描述性语法来提取匹配规则的数据如何获取动态HTML,验证码处理:通用的动态页面采集、Tesseract(机器学习库,机器图像识别系统,识别图片中的文本)Scrapy框架:中国常见的框架Scrapy、Pyspider——高定制性高性能(异步网络框架twisted),所以数据下载速度非常快,提供了数据存储、数据下载、提取规则等组件分布式策略:scrapy-redis——在Scrapy的基础上添加了-套以Redis数据库为核心的一套组件,让scrapy框架支持分布式的功能,主要在Redis里做请求指纹去重,请求分配、数据临时存储 通用爬虫缺点 只能提供和文本相关的内容(HTML、Word, PDF)等,但是不能提供多媒体(音乐、图片、视频)和二进制文件(程序、脚本)等提供结果千篇律,不能针对不同人群提供不同的搜索结果不能理解人类语上的检索

 

urllib爬取网页

例子:

import urllib.request #向指定的url地址发起请求,并返回服务器响应的数据(文件的对象) response = urllib.request.urlopen('http://www.baidu.com') #读取文件的全部内容,会把读取到的数值赋值给一个字符串变量 data = response.read() print(data) #将爬取内容存储到a.txt with open(r'a.txt','wb') as f: f.write(data)

运行结果:

例子:

import urllib.request #在urlretrieve执行过程中,会存储一些换成 response = urllib.request.urlretrieve('http://www.baidu.com',filename=r'a.html') #清除缓存 urllib.request.urlcleanup()

 运行结果:

例子:

#读取行,会把读取到的数值赋值给列表变量 data = response.readlines() print(data)

运行结果:

 

返回当前环境的有关信息response.info()

#response属性 #返回当前环境的有关信息 print(response.info())

运行结果:

 

返回状态码response.getcode()

HTTP响应状态码:

100 客户必须继续发出请求101客户要求服务器根据请求转换HTTP协议版本200交易成功201提示知道新文件的URL202接受和处理、但处理未完成203返回信息不确定或不完整204请求收到,但返回信息为空205服务器完成了请求,用户代理必须复位当前已经浏览过的文件206服务器已经完成了部分用户的GET请求300请求的资源可在多处得到301删除请求数据302在其他地址发现 了请求数据303建议客户访问其他URL或访问方式304客户端已经执行了GET,但文件未变化305请求的资源必须以服务器指定的地址得到306前一版本HTTP中使用的代码, 现行版本中不再使用307申明请求的资源临时性删除400错误请求,如语法错误401请求授权失败

例子:

response = urllib.request.urlopen('http://www.baidu.com') #返回状态码 print(response.getcode())

运行结果:

 

解码编码

解码unquote()

url = 'https://www.so.com/s?ie=utf-8&src=hao_isearch2_3.6.9&q=%E7%A6%BB%E5%A4%A9%E5%A4%A7%E5%9C%A3&eci=' #解码 newUrl = urllib.request.unquote(url) print(newUrl)

运行结果:

 

编码quote()

url = 'https://www.so.com/s?ie=utf-8&src=hao_isearch2_3.6.9&q=离天大圣=' #解码 newUrl = urllib.request.quote(url) print(newUrl)

运行结果:

 

模拟浏览器 import urllib.request url = 'http://www.baidu.com' #模拟请求头 headers = { 'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)' } #设置一个请求体 req = urllib.request.Request(url,headers=headers) #发起请求 response = urllib.request.urlopen(req) data = response.read().decode('utf-8') print(data)

运行结果:

 

设置超时

如果网页长时间不反应,系统判断超时,无法爬取

import urllib.request url = 'http://www.baidu.com' #模拟请求头 headers = { 'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)' } #设置一个请求体 req = urllib.request.Request(url,headers=headers) #发起请求 for i in range(1,100): try: response = urllib.request.urlopen(req,timeout=0.5) print(len(response.read().decode('utf-8'))) except: print('请求超时,继续下一个爬取')

运行结果:

 

HTTP请求:进行客户端与服务端之间的消息传递时使用

https://www.runoob.com/http/http-methods.html

GET:通过url网址传递信息,可以直接在URL网址上添加要传递的信息 POST:可以向服务器提交数据,是一种比较流行的比较安全的数据传递方式 PUT:请求服务器存储一个资源,通常要指定存储的位置 DELETE:请求服务器删除一个资源 HEAD:请求获取对应的HTTP抱头信息 OPTIONS:可以获取当前URL所支持的请求类型

GET: 特点:把数据拼接到请求路径的后面传递给服务器 优点:速度快 缺点:承载的数据量小,不安全 特点:把参数进行打包,单独传输 优点:数量大,安全(当对服务器数据进行修改时建议使用post) 缺点:速度慢

 

    0, GET: GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。 资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

      1, HEAD: HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

      2, PUT:这个方法沘较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL, /addBlog。 如果用PUT,则提交的URL会是像这样的”/addBlog/abc123” ,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

      3, DELETE: 删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。

      4, POST:向服务器提交数据。这个方法湖途广泛,几呼目前所有的提交操作都是靠这个完成。

      5, OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为"Allow" 的头,值是所支持的方法,如“GET, POST"

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3