url

理解浏览器历史记录(2)-hashchange、pushState

爷,独闯天下 提交于 2020-04-08 12:10:24
History(Window.history对象)对象保存着用户上网的历史记录。处于 安全方面的考虑 ,开发人员无法得知用户浏览过的URL,但是借由用户访问过的页面列表,同样可以在不知道实际URL的情况下实现后退和前进。 History对象概况: ------------------------------------------------------------------------------------------------------------------------------------------------------- Manipulating the browser history Manipulating the browser history The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties(方法和属性) that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the

爬虫基础

一笑奈何 提交于 2020-04-08 11:50:48
1.http原理 1.1 URL和URI URL: 统一资源定位符 URI: 统一资源标识符 URI是URL的父类,URI还有一个子类叫做URN(统一资源名称),URN只命名资源,而不指定如何定位资源,所以URN用的非常少,几乎所有的URI都是URL 1.2 超文本:网页的源代码HTML就可以称之为超文本 1.3 HTTP 超文本传输协议(应用层) 用于从网络文本数据到本地浏览器的传送协议 一个HTTP的操作称之为一个事物,分为四个步骤 (1)客户端与服务器端建立连接 (2)建立连接以后,客户端向服务器端发送一个请求(request) 请求:包括请求的方法,请求的网址(URL)请求头 请求体 请求体:一般承载的都是post请求的表单数据,get请求的请求体为空 (3)服务器端接收到请求后,给与响应(response) ,格式是一个状态行 响应(response) 包括响应的状态码, 响应头, 响应体 响应体: 响应的正文数据都在响应体中,请求网页时,它的响应体就是网页的HTML代码 (4)断开连接 HTTPS: 是以安全为目标的HTTP通道,简单来说就是HTTP的安全版,即HTTP下加入了SSL层,简称HTTPS,HTTPS的安全基础是SSL,因此通过它传送到内容都是经过SSL加密的。 1.4 请求方法(GET , POST) 1.4.1 get :在浏览器中 直接输入URL并回车

网络爬虫基础整理

一曲冷凌霜 提交于 2020-04-08 11:01:43
robots.txt的作用以及规范写法 Robots.txt文件的作用 一般来说出于安全的考虑,在网站seo优化时写入robots.txt文件,实际上就是告诉搜索引擎蜘蛛,网站上哪些内容允许抓取,哪些内容不允许抓取,这样做可以提高搜索引擎的抓取效率,增加搜索引擎对网站的友好度。 robots.txt的作用以及规范写法 robots.txt文件的规范写法 文件中的记录通过空行分开,以CR、CR/NL、or NL作为结束符。robots.txt文件中的记录通常以一行或多行User-agent开始,后面加上若干Disallow和Allow行,详细情况如下: User-agent: 用于描述搜索引擎蜘蛛的名字,在"Robots.txt"文件中,如果有多条User-agent记录说明有多个搜索引擎蜘蛛会受到该协议的限制,对该文件来说,至少要有一条User-agent记录。如果该项的值设为*,则该协议对任何搜索引擎蜘蛛均有效,在"Robots.txt"文件中,"User-agent:*"这样的记录只能有一条。 Disallow: 用于描述不希望被访问到的一个URL,这个URL可以是一条完整的路径,也可以是部分的,任何以Disallow开头的URL均不会被Robot访问到。 例如,”Disallow:/help”是指禁止搜索引擎蜘蛛抓取/help.html和/help/index.html;而

Python3标准库:urllib.parse分解URL

烈酒焚心 提交于 2020-04-08 09:41:58
1. urllib.parse分解URL urllib.parse模块提供了一些函数,可以管理URL及其组成部分,这包括将URL分解为组成部分以及由组成部分构成URL。 1.1 解析 urlparse()函数的返回值是一个ParseResult对象,其相当于一个包含6个元素的tuple。 from urllib.parse import urlparse url = 'http://netloc/path;param?query=arg#frag' parsed = urlparse(url) print(parsed) 通过元组接口得到的URL各部分分别是机制、网络位置、路径、路径段参数(由一个分号将路径分开)、查询以及片段。 尽管返回值相当于一个元组,但实际上它基于一个namedtuple,这是tuple的一个子类,除了可以通过索引访问,它还支持通过命名属性访问URL的各部分。属性API不仅更易于程序员使用,还允许访问tupleAPI中未提供的很多值。 from urllib.parse import urlparse url = 'http://user:pwd@NetLoc:80/path;param?query=arg#frag' parsed = urlparse(url) print('scheme :', parsed.scheme) print('netloc :

solr 通过URL删除索引

こ雲淡風輕ζ 提交于 2020-04-08 06:50:21
使用:update 参数:stream.body=<delete><query>date:[2014-06-15T00:00:00Z TO *]</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true 直接用 url, 如: http://localhost:8080/solr/MyCollection/update?stream.body=<delete><query>date:[2014-06-15T00:00:00Z TO *]</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true 删除2014-06-15之后的索引数据 stream 相关参数还有: stream.file=(服务器本地文件), stream.url 分别指到你的删除文本, 这里是直接字符串内容用 stream.body 参数。 commit 参数是指提交,提交了才能看到删除效果。 删除指令有两种,一是:用 <id></id> 包装;二是:<query></query> 包装。 指令都很明显,一个是 id 值(是在 schema.xml 的 uniqueKey 所指字段的值,而不是索引内部的 docId);query 值是查询串,如

pathon爬虫之request模块的使用

会有一股神秘感。 提交于 2020-04-07 16:45:48
1.request 1.基于网络请求的模块。 2.环境的安装:pip install requests 3.作用:模拟浏览器发起请求 4.分析requests的编码流程: 1.指定url 2.发起了请求 3.获取响应数据 4.持久化存储 2.需求:爬取搜狗首页的页面源码数据 import requests #1.指定url url = 'https://www.sogou.com/' #2.发起请求,get的返回值是一个响应对象 response = requests.get(url) #3.获取响应数据,text属性返回的是字符串形式的响应数据 page_text = response.text #4,持久化存储 with open('./sogou.html','w',encoding='utf-8') as fp: fp.write(page_text) 3.需求:简易的网页采集器 url = 'https://www.sogou.com/web?query=人民币' response = requests.get(url) #修改响应数据的编码格式 response.encoding = 'utf-8' page_text = response.text with open('./人民币.html','w',encoding='utf-8') as fp: fp.write

Python爬虫案例演示:Python多线程、多进程、协程

安稳与你 提交于 2020-04-07 15:32:41
很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬取速度。本文 就通过代码讲解如何使用 多进程、多线程、协程 来提升爬取速度。注意:我们不深入介绍理论和原理,一切都在代码中。 二、同步 首先我们写一个简化的爬虫,对各个功能细分,有意识进行函数式编程。下面代码的目的是访问300次百度页面并返回状态码,其中 parse_1 函数可以设定循环次数,每次循环将当前循环数(从0开始)和url传入 parse_2 函数。 import requestsdef parse_1(): url = 'https://www.baidu.com' for i in range(300): parse_2(url)def parse_2(url): response = requests.get(url) print(response.status_code)if __name__ == '__main__': parse_1() 性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待 示例代码就是典型的串行逻辑, parse_1 将url和循环数传递给 parse_2 , parse_2 请求并返回状态码后 parse_1 继续迭代一次,重复之前步骤 三、多线程 因为CPU在执行程序时每个时间刻度上只会存在一个线程

最近面试的几个问题 (二) request_url 去重之布隆去重

大兔子大兔子 提交于 2020-04-07 11:53:51
去重策略 1)使用scrapy自带的set集合去重,当程序结束的时候会被清空,缺点:再次运行会导致数据重复。 2)使用mysql做去重,对url地址进行md5,base64加密,加密之后会得到一串字符,判断字符串 是否在mysql表中,如果在表示已经爬取过了,如果不在,表示没有爬取,执行请求,将加密后的url 地址存入表中。缺点: 但是这个方法对mysql压力过大,导致崩溃,不推荐 3)使用scrapy_redis的去重策略,会将已经爬取的url地址经过编码后存入redis,并且会做数据持久化,当爬虫再次启动时,会重新加载本地的数据,对爬虫的url做去重。缺点:如果数据量较大的时候,会占用较多的内存空间 4)使用布隆去重,采用多重哈希,将url地址映射到位阵列中的某个点上,空间和时间利用率更高(推荐) 布隆去重的优点和缺点 优点 相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数。另外, Hash 函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势 缺点 但是布隆过滤器的缺点和优点一样明显。误算率(False Positive)是其中之一。随着存入的元素数量增加,误算率随之增加。但是如果元素数量太少,则使用散列表足矣。 原文链接:https://blog.csdn

什么是 HTTP ?

牧云@^-^@ 提交于 2020-04-07 11:23:25
超文本传输协议(HTTP)的设计目的是 保证客户端与服务器之间的通信 。 HTTP 的工作方式是 客户端与服务器之间的请求-应答协议 。 web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。 举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的 状态信息 以及可能被 请求的内容 。 Form 中的 get 和 post 方法,在数据传输过程中分别对应了 HTTP 协议中的 GET 和 POST 方法。二者主要区别如下: 1、Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。 2、Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向 URL。 3、Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post 的所有操作对用户来说都是不可见的。 4

ASP.NET suddenly wants a trailing slash

若如初见. 提交于 2020-04-07 09:29:29
问题 In an ASP.NET application, we have plenty (think, several dozen) of controller classes like this: [RoutePrefix("some/thing/1.0")] public class SomeController : ApiController { [HttpGet] [Route("")] public string GetInfo() { return "hello world"; } [HttpPut] [Route("")] public void StoreInfo(string info) { // ... } } This has been working fine for some weeks, without any issues. We could call those endpoints as follows: GET https://myWebApp/client/some/thing/1.0 Now, with yesterday's nightly