python(二十四) |
您所在的位置:网站首页 › python获取浏览器版本 › python(二十四) |
目录 爬虫 使用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页面中有用的数据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 |