爬虫从入门到放弃 - 纯新手学习-爬虫基本原理

1.什么是爬虫?

请求网站并提取数据的自动化程序

请求:客户端向服务端发送请求获得网页资源,是一段html代码,包含html标签和一段信息。

提取:提取出想要的信息,然后将结构化的数据存储到文本

自动化:写完程序一直运行着,代替客户端向服务端发送请求,可以大量的获得数据

 

爬虫四部

1.发起请求:通过http库向发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。

2 .获取响应内容:如果服务器能正常响应,会获得一个Response,Response内容便是所要获取的页面内容。类型可能有htmlmjson字符串,

二进制数据,如图片、视频等类型。

3.解析内容:得到的内容可能是html,可以用正则表达式,网页解析库进行解析,可能是json,可以直接转换为json对象解析,可能是二进制数据,

可以作保存或者进一步的处理。

4.保存数据:保存形式多样,可以保存文本,也可以保存数据库,也可以保存特定格式的文件。

 

请求的参数包含在哪一个方面。

get请求直接输入url回车

post请求需要构建表单,点击表单提交,登陆账户点击提交就是发送post请求,因为登陆账户会有隐私,不能直接放在url里,需要做成表单提交。

 

1. Request主要构成

请求方式:主要有get,post两种方式,其他的方式还有head,put,delete,options。

request method

请求URL:url全称资源统一定位符。任何一个软件,文档,资源都可以用url来唯一确定。

requeset url

请求头:包含请求时的头部信息。如user_Agent,cookies,Host

request headers

请求体:请求时额外携带的数据。如表单提交时的表单数据。

提交表单时候的表单数据 format

 

2.Response 主要构成

1.响应状态:200代表成功,301代表跳转,404找不到页面,502服务器错误。状态码

status code 200 ok 表示请求正常发送,服务器正常响应,网页的响应状态

2.响应头:如内容类型,内容长度,服务器信息,设置cookie等等。

reponse headers

3.响应体:最主要的部分,包含了请求资源的内容,如网页HTML,图片二进制数据等。

 

具体实例:

>>> import requests
>>> response = requests.get('http://www.baidu.com')
>>> response.text  # 可以拿到网页源码(响应体)

开始对网页进行解析

response.headers 查看响应头

response status_code  拿到响应状态

response.content 获得响应体的二进制

 

第一次爬虫,兴奋,虽然是最简单的一个图片

import requestsresponse = requests.get( 'https://img4.duitang.com/uploads/item/201603/01/20160301162401_fc4Rv.jpeg')>>> with open(r'D:\\sylm','wb') as f:
...     f.write(response.content)
...     f.close()
第一次爬小姐姐图片

 

转载于:https://www.cnblogs.com/Roc-Atlantis/p/9346850.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES5-11原型与原型链深入、对象继承

原型 谁调用,this就指向谁,当实例对象有该属性时,不会去原型上查找 创建对象的两种方法:字面量、new Object()一般不用后面的二者创建出来的对象没有差异 Object.create() var 实例 Object.create(对象…

算法 --- 希尔排序、归并排序、快速排序的js实现

希尔排序: function shellSort(arr) {let len arr.length;let temp, gap 1;while(gap < len/3) {gap gap*3 1}while(gap >1) {for(let i gap;i< len; i) {temp arr[i];for( var j i-gap; j> 0 && arr[j] > temp; j - gap) {arr[j gap] arr[j];}…

ES5-12 【utils】继承深入、call、apply、圣杯模式、模块化

继承深入 这两种方式继承不够合理&#xff08;为什么&#xff09; 将实例作为子类的原型 在子类的构造函数内部借用父类的构造函数 将父类的原型作为子类的原型&#xff08;会修改父类的原型&#xff09; css圣杯布局&#xff08;左右宽度固定、中间自适应&#xff09…

vue实现星级评价效果

希望对你们有用&#xff0c;已经自己试过可以的才发布出来的 效果如下&#xff1a; html&#xff1a; <template> <div class"evaStar"> <ul class"star"> <li v-for"(itemClass,index) in itemClasses" :class"itemC…

算法 --- 二叉树查找树的先序(中序、后序)遍历的js实现

结点: function Node(data, left, right) {this.data data;this.left left;this.right right;this.show show; }显示树的数据: function show(){return this.data; }二叉查找树: // Binary Search Tree function BST(){this.root null;this.insert insert; }添加结点到…

ES5-13 对象属性遍历、this、callee、caller

链式调用 在每个函数内部return this 访问对象属性 点语法[]中括号内是字符串或是变量 数组是特殊的对象 对象属性遍历 for in(遍历对象或数组) - 不必再用Object.keys那么麻烦了 for(var key in obj){console.log(obj[key])// obj.key返回undefined// 因为js引擎会转换为…

算法 --- 顺序查找、二分查找的js实现

顺序查找: function seqSearch(arr, data) {for(let i 0; i< arr.length;i) {if(data arr[i]) {return i;}}return -1 } var arr[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(seqSearch(arr, 15))二分查找: function binSearch(arr, data) {let low 0;let…

vue --- cdn导入,一些基本操作

使用cdn导入vue.并使用vue做一些简单的操作. cdn导入vue: <script src"https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>vue-router的CDN导入: <script src"https://unpkg.com/vue-router2.5.3/dist/vue-router.js"></scrip…

ES5-14 【utils】三目运算符、对象克隆、浅拷贝、深拷贝

浅拷贝 for-in&#xff08;遍历一个实例对象&#xff0c;原型上的属性也会打印&#xff09; Object.prototype.num 1 function shallowClone(origin, target) {for (var key in origin) {target[key] origin[key]} } var p1 {name: 人类,daughter: {first: Jessica,} } va…

java代理的原理及应用

什么是代理模式&#xff1f; 定义 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 ——百度百科 代理模式的角色 抽象角色&#xff1a;代…

vue --- 过滤器、计算、方法、观察属性

过滤器属性:filters: <div id "app">{{num}}<br>{{num | toInt}}<br>{{num | toFloor}}<br>{{num | toCeil}}<br> </div> <script>let vm new Vue({el: #app,data:{num:3.45,},// 过滤器filters:{toInt(value){return …

《你不知道的JavaScript(上卷)》读书笔记

第一次尝试用思维导图记笔记&#xff0c;感觉还不错~~~不过还是改不了我读书笔记写成抄书笔记的毛病 。 因为开始学JS的时候&#xff0c;一般浏览器就已经支持ES6了&#xff0c;所以比较喜欢使用ES6语法&#xff0c;let&#xff0c;>等&#xff0c;文中代码不是抄书的&#…

ES5-15 数组基础、数组方法、数组排序

创建数组 字面量 var arr []构造函数 var arr new Array()不使用new var arr Array() 所有数组都继承于Array.prototype&#xff0c;能使用其中的数组方法 数组是另一种形式的对象&#xff0c;访问机制相同数组的empty项打印出来是undefined&#xff0c;empty不是值只是一个…

vue --- vue中的几个钩子属性

1.创建前:beforeCreate <div id"app">{{name}}</div><script>let app new Vue({el:#app,data:{name:31231312},beforeCreate(){console.log(挂在前);console.log(this.$data);console.log(this.$el);}})</script>// beforeCreate()是在Vue挂…

ES5-16【utils】数组方法、类数组

数组方法 concat 返回值是拼接后的数组 toString 将数组转成字符串&#xff0c;用逗号隔开 slice(a&#xff0c;b) [a&#xff0c;b) 不传值&#xff0c;拷贝了一份不传b&#xff0c;截取到最后一位传b&#xff0c;截取到b之前的那位a/b是负数&#xff08;和splice一样&a…

Catalan卡塔兰数

卡塔兰数 卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁查理卡塔兰 (1814–1894)命名。 卡塔兰数的一般项公式为 另类递归式&#xff1a; h(n)((4*n-2)/(n1))*h(n-1); 前几项为: 1, 1, 2, 5, 14, 42, 132, 429, …

vue --- v-html、v-bind

v-html // 有时候,我们需要展示<strong>,但直接使用下面的语法并不会显示 <div id "app">{{name}}</div><script>let app new Vue({el:#app,data:{name:<strong>啦啦啦</strong>}}); </scritp> // 结果当然没让人失望此…

ES5-17/18 错误信息、try_catch、严格模式

错误信息 语法错误 标识符名称&#xff08;变量、函数名&#xff09;不规范对关键字赋值基本语法错误&#xff0c;如分号打错 引用错误 变量、函数未声明给无法赋值的对象赋值var a 1 2 范围错误 数组长度为负数方法参数超出可行范围toFixed(-1) 类型错误 调用不存在…

vue --- v-text、v-show、v-if、v-else

v-text: <div id "app"><p v-text"msg"></p> </div> <script>let app new Vue({el:#app,data:{msg:Hello Vue}}) </script>// 可见v-text在某种程度上等价于 {{}}v-show: <div id "app"><div…

vue --- v-for、v-on、v-model、v-once

v-for: <div id "app"><ul><li v-for"item in list">{{item}}</li></ul> </div> <script>let app new Vue({el:#app,data:{list:[B,A,T]}}) </script>拿到索引index: <div id"app">&…