response

爬虫实现爬取牛客网数据结构试题

不问归期 提交于 2020-03-04 22:15:23
1 目标 爬取牛客网上关于《数据结构》的试题。 试题链接 进入网页可以看到,如果选择《数据结构》的某个知识点组卷,一次最多只能出30题。 因此,想法就是用程序一次将30题全部爬下。随后生成新的试卷再进行爬虫。 2 实现思路 2.1 最初思路 访问第一题的url 爬取试题 找到下一题的url后,重复1.2操作,直到爬完30题 很遗憾,打开devtools看试题页的元素,发现必须先登录才能有试题页面, 因此问题来到了登录上。 用devtools看登录过程,没有相应的帐号、密码信息,因此无法用帐号密码post方式登录。但是注意到登录页有cookie,如下图右侧,故可采用cookie方式登录。 另外发现该页面有全部试题的url,因此新的方案为 2.2 新思路 通过cookie访问第一题url,获得全部试题的url 依次访问每题的url,爬取 3 代码 # -*- coding: utf-8 -* """ 目标,爬取全部的题目以及答案 1. 利用cookie访问网页,记录全部的题目id并记录在内存中 需要把标签的属性记下来 2. 依次访问这些题目的网页,爬取问题选项和答案 3. 存储到本地文件 """ import requests from lxml import etree import re def pageid ( url , cookie ) : headers = { 'User

response.setHeader(\"Cache-Control\",\"no-cache\");的作用

被刻印的时光 ゝ 提交于 2020-03-04 10:10:42
1. response.setHeader("Cache-Control","no-cache"); This is used to prevent the browser from caching your dynamic content generated by a JSP or Servlet. You set this attribute in the HTTP header of the response object which would tell the browser not to cache this content. So everytime you request the page again, the browser would make a new request, instead of showing you a cached page. 2.使用服务器端控制AJAX页面缓存: response.setHeader( "Pragma", "no-cache" ); response.addHeader( "Cache-Control", "must-revalidate" ); response.addHeader( "Cache-Control", "no-cache" ); response.addHeader( "Cache-Control",

记一次 CORS 跨域请求出现 OPTIONS 请求的问题及解决方法

懵懂的女人 提交于 2020-03-04 09:34:46
今天前后端在联调接口的时候,发生了跨域请求资源获取不到的问题。 首先说明下跨域问题的由来。引自 HTTP 访问控制 的一段话: 当 Web 资源请求由其它域名或端口提供的资源时,会发起跨域 HTTP 请求(cross-origin HTTP request)。 比如,站点 http://domain-a.com 的某 HTML 页面通过 <img> 的 src 请求 http://domain-b.com/image.jpg。网络上,很多页面从其他站点加载各类资源(包括 CSS、图片、JavaScript 脚本)。 出于安全考虑,浏览器会限制脚本中发起的跨域请求。比如,使用 XMLHttpRequest 和 Fetch 发起的 HTTP 请求必须遵循同源策略。因此,Web 应用通过 XMLHttpRequest 对象或 Fetch 仅能向同域资源发起 HTTP 请求。 既然知道了导致问题的原因,就开始解决吧。 笔者使用的 是 Django 框架。github 上面已经有人分享了解决办法,就是 django-cors-headers 。我们直接 pip install django-cors-headers 安装一下呗。 安装好了以后,需要我们去 settings 文件中去配置一下。常见的配置如下: 先在 INSTALLED_APPS 中引入 corsheaders :

性能优化

岁酱吖の 提交于 2020-03-04 08:53:32
最近对原来的项目优化,总结如下:   1. 使用存储过程(如果在程序里用exec 存储过程参数,这样执行似乎并没有快多少)。     在 数据库 里是预编译的,也不需要在字符串传输上花费大量时间。 防sql注入攻击。   2. 尽量优化数据库语句,使逻辑尽量简单   a) 还有就是在使用函数时,charindex >like > padindex 效率依次递减。     b) 查询字段是否包含在以,分隔的字段串时,最好不要用in 速度非常慢。     还有好多,可以总结的,这里就不再描述了。   3. EnableViewState(页面的视图状态)。如果无特殊要求设置为false。   使用ViewState,每个对象都必须先序列化到ViewState中,然后再通过回传进行反序列化,因此使用ViewState是有代价的。尽量减少使用对象,如果可能,尽量减少放入ViewState中的对象的数目。下面情况基本上可以禁用ViewState:   (1) 页面控件 (.ascx)。 (2) 页面不回传给自身。 (3) 无需对控件的事件处理。 (4) 控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理)。   单个页面或每个页面都禁用 ViewState,如下所示:   单个页面:<%@ Page EnableViewState=”False” %>   每个页面

WCF REST (二)

跟風遠走 提交于 2020-03-04 07:53:59
今天主要写下 POST等其他方式 发送请求 以及 流方式 文件的上传与下载 一.Post 提交数据 先来想下 POST和Get 的不同 Get 方式 我们直接通过 url 来传递参数 先来看下我们的 创建方法吧 [WebInvoke(UriTemplate = "Tasks/Add", Method = "POST", RequestFormat = WebMessageFormat.Json)] void Create(PocoTask pocoTask); 我们需要接受一个实体类 格式为json格式 这就再次出现上文的问题 我们的客户端没有实体类 没法把实体类序列化为json 难道要自己拼接json么? 当然不用。那简直太痛苦了。 这里给大家推荐 Json.Net 这里有两个类 可以帮我们完成 单个实体的转换 以及集合实体的转换 分别是 JObject 和 JArray 我们只需声明这两个类后 .toString 就可得到他的json格式了 很方便吧~ 看代码 这里完全可以不用dynamic的 像注释那样的写法就行 这样即使服务器不支持.net4.0 也可以使用的 知道了如何构建POST 提交的数据 就开始实现POST提交吧~ 上代码 依然是三种方式 放一起 对比 这三个方式 个人很推荐 第三种 也是目前最新的 .net4.5里集成的 访问REST 非常的方便 因为他支持

thinkphp 使用webuploader 回显图片,生成缩略图,多图片上传 2

烈酒焚心 提交于 2020-03-04 06:18:26
上一篇说了webuploader图片上传,这篇说回显,读取数据库中的图片路径并显示 回显图片的前提是拿到后台的图片上传路径, var imgs=new Array(); uploader.on('uploadSuccess', function(file, response) { imgs.push(response.data); }); response就是后台传回的json数据, 读取数据库中的图片路径并显示的解决方法是用layer打开多一个窗口 function picture_add(title,url){ var index = layer.open({ type: 2, title: title, area: ['700px', '530px'], fix: false, //不固定 maxmin: true, content: url }); } function uploadCallback(imgs){ $.each(imgs,function(index,value){ $(".callback_img").attr('src',value); $('#callback_img').val(value) // var dom = "<img with='100' height='100' src='\\"+value+"'/>" // $(".select

python爬虫学习笔记(二)

a 夏天 提交于 2020-03-04 06:17:34
上一篇介绍了爬虫的基本用法,用来简单的爬取了一个网站,我们直接用网址就访问了一个网站,但这样是很不好的,有的网站这样也进不去,打个比方,就像我们知道某个人的家庭住址,我们想找她的时候直接就闯了进去,也没说我们是谁,也没和他说我们要来找他,这样可以吗?当然不行!所以我们访问网站时还应该把我们伪装一下,伪装成一个浏览器,这样我们就算是个正常用户了。 我们怎么来伪装呢?要执行更复杂的操作,我们需要给urlopen传入一个requst对象而不是一个简单的网址, import urllib . request #引入库 req = urllib . request . Request ( "https://www.baidu.cn" ) #创建request对象 response = urllib . request . urlopen ( req ) #访问网页 text = response . read ( ) . decode ( ) #解码 print ( text ) 而要实现我们伪装成浏览器的目的,我们还需要给request对象一个User-Agent的报头,这个User-Agent,是每个浏览器都有的一个东西,你可以按F12,在开发者工具的network里找到。 再说request对象,他可以接收多个参数 url(网址), data(用来传递post参数,默认空),

(待整理)Python:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)

梦想的初衷 提交于 2020-03-04 00:34:47
一、requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起来比urllib更加简洁方便。 requests是第三方库,使用前需要通过pip安装。 pip install requests 1.基本用法: import requests #以百度首页为例 response = requests.get('http://www.baidu.com') #response对象的属性 print(response.status_code) # 打印状态码 print(response.url) # 打印请求url print(response.headers) # 打印头信息 print(response.cookies) # 打印cookie信息 print(response.text) #以文本形式打印网页源码 print(response.content) #以字节流形式打印 运行后显示: 状态码:200 url:www.baidu.com #输出headers信息、cookie信息以及网页源码信息 <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]> 2.各种请求方式(HTTP测试网站:http://httpbin.org/) import requests requests

Cookie学习总结

吃可爱长大的小学妹 提交于 2020-03-03 20:31:47
Cookie简述 1. 概念 一种客户端会话技术,可以将一些少量的数据保存在客户端。 2. 快速使用 步骤 创建cookie对象,并设定数据 new Cookie(String name, String value); 发送cookie对象到客户端(将cookie加载到response) response.addCookie(Cookie cookie) ; 获取cookie(获取从客户端返回的request获取cookie) Cookie[] request.getCookies() ; 代码 //设定cookie数据,创建cookie对象 Cookie c=new Cookie("msg","hello"); //发送cookie对象到客户端 response.addCookie(c); //获取cookie并打印 Cookie[] cs = request.getCookies(); if(cs!=null){ for (Cookie c : cs) { String name = c.getName(); String value = c.getValue(); System.out.println(name+":"+value); } cookie的一些小细节 一次可不可以发送 多个 cookie? 可以,同时也可以接收到多个cookie。

meta http-equiv=\"refresh\" 和13种跳转页面方法

試著忘記壹切 提交于 2020-03-03 19:02:39
· meta http-equiv="refresh" 和13种跳转页面方法 我们来说说13种页面跳转方法 先来介绍一下在 服务端JSP脚本 中跳转页面的4种方法: 一、在服务端JSP脚本 中跳转 1. response.sendRedirct(“跳转到页面”); 该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,使浏览器显示重定向网页的内容. request无法传值过去. 执行完该页所有代码,然后再跳转到页面. 跳转地址栏改变. 可以跳转到其他服务器上的页面response.sendRedirct(‘//www.jb51.net’). 2. response.setHeader(); 该方法和response.sendRedirect一样,通过修改HTTP协议的HEADER部分 response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); String newLocn=”/index.html”; response.setHeader(“Location”,newLocn); 3. < jsp:forward page=”跳转页面”/> 该方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在< jsp:forward