我的第二十三篇博客---爬虫简介

网络爬虫(又被称为网页蜘蛛,网络机器人) 就是模拟客户端(主要指浏览器)发送网络请求,接收请求响应,按照一定的规则,自动地抓取互联网信息的程序。原则上,只要是客户端(主要指浏览器)能做的事情,爬虫都能够做。

爬虫分类:
通用爬虫:
通常指搜索引擎的爬虫(百度,谷歌)

聚焦爬虫:针对特定网站的爬虫

积累式爬虫:从开始运行到打到停止条件的过程中不断爬取目标数据,过程中会进行去重操作
增量式爬虫:只爬取新产生的或者已经发生变化网页的爬虫
深网爬虫:隐藏在搜索表单或登录表单之后的数据,只有用户提交一些关键词或登录才能获得的Web页面

robots协议
在百度搜索中,不能搜索到淘宝网中某一个具体的商品的详情页面,这就是robots协议在起作用

Robots协议:
Robots协议(也成为爬虫协议、机器人协议等) 的全称是“网络爬虫排除标准”,网站通过Robots协议告诉搜索引擎那些页面可以抓取、哪些页面不能抓取
Robots协议是一个道德层面的约定,爬虫作者遵不遵守完全看自己意愿。
例如:淘宝的robots协议

小结:
爬虫分类:通用爬虫、聚焦爬虫
爬虫的流程:
向起始url发送请求,并获取响应
对响应进行提取
如果提取url,则继续发送请求获取响应
如果提取数据,则将数据进行保存
robots协议:无需遵守该协议

在发送请求,获取响应的过程中就是发送http或https的请求,获取http或https的响应
url list ————
| |
http,https |
| |
响应内容 ——提取url
|
提交数据
|
入库

http
超文本传输协议

应用(http)
TCP
Ip
默认端口80

https
HTTP+SSL(安全套接字层),即带有安全套接字层的超文本传输协议
默认端口号:443
https比http更安全,但是性能更低

应用(http)
SSL
TCP
Ip

浏览器先向地址栏中的url发起请求,并获取响应
在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改--这个过程叫做浏览器的渲染

注意:
但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应(该响应的内容可以是html,css,js,图片等)
浏览器渲染出来的页面和爬虫请求的页面很多时候并不一样
所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取

请求方法 空格 URL 空格 协议版本 回车符 换行符 #这是请求行
头部字段名 : 值 回车符 换行符
... #这三个是请求头部
头部字段名 : 值 回车符 换行符
回车符 换行符
#这一行是请求数据

http常见请求头
Host(主机和端口号)
Connection(链接类型)
Upgrade-Insecure-Requests(升级为HTTPS请求)
User-Agent(浏览器名称)
Accept-Encoding(文件编解码格式)
Cookie(Cookie)
x-requested-with:XMLHttpRequest(表示该请求是Ajax异步请求)

http重要的响应头
Set-Cookie (对方服务器设置cookie到用户浏览器的缓存)
Last-Modified (对方静态页面最后更新时间)

响应状态吗(sataus_code)
常见的状态码:
200成功
302、307:临时转移至新的url
404:找不到该页面
500:服务器内部错误
503:服务器不可用
所有的状态码都不可信,一切以是否获取到数据为准

小结:
记忆http、https的概念和区别:
http:超文本传输协议
https:http+ssl,即带有安全套接字层的超文本传输协议
记忆浏览器发送httpp请求的过程:
浏览器先向地址栏中的url发起请求,并获取相应在返回的响应内容(html)中,会带有css,js,图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应,浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应,从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改

记忆http请求头的形式:
GET/item/503/1227315?fr=aladdin HTTP/1.1
Host:www.baidu.com
....

记忆http响应头的形式
keepalive在很多情况下能够重用连接,减少资源消耗,缩短响应时间
HTTP/1.1 200 OK
Connection:keep-alive
...

str:unicode的呈现形式
bytes:字节类型,互联网上数据的都是以二进制的方式(字节类型)传输的

str和bytes类型的互相转换:
str使用encode方法转换为bytes
s=‘asd‘
print(type(s)) 结果为str
#str编码转变为bytes类型
b=s.encode()
print(type(b))

bytes通过decode转化为str
b=b‘asd‘
print(type(b))
#bytes类型解码成为str类型
s=b.decode()
print(type(s))

原文地址:https://www.cnblogs.com/sll-csdn/p/10926059.html

时间: 2024-10-08 12:09:40

我的第二十三篇博客---爬虫简介的相关文章

我的第二十七篇博客---beautifulsoup与csv操作方法

Beautiful Soup和lxml一样,也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据lxml只会局部遍历,而Beautiful Soup是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml/Beautiful Soup 用来解析HTML比较简单,API非常人性化,支持CSS选择器,Python标准库中的HTML解析器,也支持lxml的解析器 bs4的基本使用实:首先必须要导入bs4库from b

我的第三十三篇博客---flask

使用框架的优点:稳定性和可扩展性强可以降低开发难度,提高了开发效率 在Python中常用的Web框架有:flaskdjangotornado Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQL_Alchemy),都需要用第三方的扩展来实现.其WSGI工具箱采用Werkzeu

我的第二十篇博客---Mysql基本命令

explain select name from student where name='小明';查看查询了多少行才找到 alter database 数据库名 character set utf8;  将数据库的编码改为utf8create database 数据库名 charset=utf8;   创建数据库指定编码为utf8 当一个表数据全部删除时,id设有主键自增,truncate table 表名;下次id从1开始 原表数据全部删除 要是不想全部删除 则 alter table 表名

我的第二十一篇博客---Mysql强化及应用于python

使用python读取数据库: from pymysql import connectconn=connect(host='localhost',port=3306,database='数据库名',user='root',password='密码',charset='utf8')#获取cursor对象cur=conn.cursor()#执行sql语句sql="select *from stu"cur.execute(sql)#fetchall取多条数据result=cur.fetchal

小白神器 - 一篇博客学会HTML

小白神器 - 一篇博客学会HTML 一. 简介 1. HTML 定义 htyper text markup language  即超文本标记语言. 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言. 2. 标签定义和属性 是由一对尖括号包裹的单词构成 例如: <html> *所有标签中的单词不可能以数字开头. 标签不区分大小写.<html> 和 <HTML>. 推荐使用小写. 标签分为两部分: 开始标签<a

python网络爬虫入门(一)——简单的博客爬虫

最近,为了微信公众号的图文,上网疯狂的收集和看了一些有深度的新闻和有趣的引人深思的文字评论,并选择了几篇极品发布出去.但感觉一篇一篇的看实在是麻烦死了.想找一个简单的解决办法,看能不能自动把网上的资料收集起来,然后自己用统一筛选.不巧,最近准备学习下网络爬虫相关知识,于是按照网上的教程自己学着试写了一个小小的爬虫,嘻嘻,是用来爬韩寒博客的. 先把完整的代码贴上来,如果朋友们需要试验下,请先安装python相关环境,然后在复制粘贴保存,再按F5运行. #导入urllib库,python访问网页必须

一篇博客让你了解RxJava

RxJava可以说是2016年最流行的项目之一了,最近也接触了一下RxJava,于是想写一篇博客,希望能通过这篇博客让大家能对其进行了解,本篇博客是基于RxJava2.0,跟RxJava1.0还是有很多不同的 基础知识 RxJava的核心就是"异步"两个字,其最关键的东西就是两个: Observable(被观察者) Observer/Subscriber(观察者) Observable可以发出一系列的 事件,这里的事件可以是任何东西,例如网络请求.复杂计算处理.数据库操作.文件操作等等

第二十三篇 Java如何编译 计算器 的源代码共享

大家好,今天放了一天的假,无聊的我简单的敲了一下计算器的源代码,发现以前的东西都忘的差不多了,所以趁现在还有点记忆,先试着敲回以前的感觉.... 好了,废话不多说,先看原码: 先创建一个主类: public class Test{ public static void main(String[ ] args){ Calculator calc=new Calculator(); calc.PaintingFrameUi(); } } 在新建几个监听器: 第一个: import javax.swi

[iOS]关于 App 混合(Hybrid)开发的优化,包括H5、Weex等(本篇博客主要针对 iOS 应用讲解,但该思想同样适用于Android)

我们知道混合开发,可以节省很多成本(时间成本,经济成本等等),所以有很多公司比较钟爱这种开发形式,今天所讲的优化方式,也是我在我们公司的应用中实际用了的,而且我写的这个优化的 SDK 已经开源到 github 上了,有兴趣的同学可以下载来看一下,有不足的地方欢迎指正.这里给出链接:https://. 转载请注明出处:http://www.cnblogs.com/shisishao/p/6830736.html -.首先,先介绍下什么是混合开发: 我们通常把移动开发分为Web.Native和Hyb