精华内容
下载资源
问答
  • Python爬虫基础-01-带有请求参数的爬虫

    万次阅读 多人点赞 2018-06-06 19:06:23
    在上一篇文章Python爬虫入门中,Python爬虫程序爬取了指定网页的信息,爬虫发出的请求是一个固定的URL和部分请求信息,并没有请求参数,但是爬虫工作过程中发出的请求一般都需要加上请求参数,以完成对指定内容的...

    在上一篇文章Python爬虫入门中,Python爬虫程序爬取了指定网页的信息,爬虫发出的请求是一个固定的URL和部分请求信息,并没有请求参数,但是爬虫工作过程中发出的请求一般都需要加上请求参数,以完成对指定内容的爬取

    HTTP请求分为POST请求和GET请求,在Python爬虫中,这两种请求因其结构不同,所以添加请求参数的方式也不同,下面将分别介绍使用POST请求和GET请求的Python爬虫

    GET请求

    使用GET请求的Python爬虫比较简单,由于GET请求的请求参数包含在URL地址中,所以只需要先确定请求参数,然后将请求参数拼接到URL中即可,即 URL + 请求参数(字符串拼接)

    使用GET请求的Python爬虫案例

    首先,一个使用GET请求访问网页的例子。如下图所示,使用百度,以“爬虫”为关键字进行查询,可以看到,地址栏的URL为:https://www.baidu.com/s?word=爬虫。我们可以使用这个URL地址利用爬虫爬取该网页
    这里写图片描述
    我们写一个可以使用和上面一样的GET请求的Python爬虫程序,需要用到urlllib2包

    # coding=utf-8
    
    import urllib2
    
    url = "http://www.baidu.com/s"
    word = {"wd":"爬虫"}
    # url首个分隔符是 ?
    newurl = url + "?" + word     
    
    # 添加User-Agent,完善请求信息
    headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    
    request = urllib2.Request(newurl, headers=headers)
    
    response = urllib2.urlopen(request)
    
    print response.read()

    程序写好后,直接运行会报错,这是因为请求参数需要进行编码转换,在使用浏览器访问时,这个转换是浏览器自动完成的。但是在Python爬虫程序中,这一步就需要程序员自己来完成了。编码转换需要使用urllib包

    # coding=utf-8
    
    import urllib      #负责url编码处理
    import urllib2
    
    url = "http://www.baidu.com/s"
    word = {"wd":"爬虫"}
    # 将请求参数转换成url编码格式(字符串)
    word = urllib.urlencode(word) 
    # url首个分隔符是 ?
    newurl = url + "?" + word     
    
    # 添加User-Agent,完善请求信息
    headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    
    request = urllib2.Request(newurl, headers=headers)
    
    response = urllib2.urlopen(request)
    
    print response.read()

    运行程序,控制台打印的信息如下,爬取成功
    这里写图片描述

    使用GET请求的Python爬虫的应用

    在使用Python爬虫爬取一个有分页的网站时,各个页面的URL非常接近,唯一的不同就是页码数字不同,这是使用GET请求能非常简单方便的将该网站的各个页面爬取下来
    这里写图片描述
    如下图,Python吧的第一页的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0
    第二页的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
    第三页的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=100
    可以看出URL中只有pn参数在变化,它控制着到底访问该吧的那一页,发现了这个规律后,就可以通过一个循环,切换URL地址中的参数从而将整个贴吧中所有页面的内容都爬取下来
    这里写图片描述

    # coding=utf-8
    
    import urllib     
    import urllib2
    
    url = "http://tieba.baidu.com/f?kw=python&ie=utf-8&pn="
    
    i = 0
    while i<1000:
        i = i +50
    
        newurl = url + i   
    
        # 添加User-Agent,完善请求信息
        headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    
        request = urllib2.Request(newurl, headers=headers)
    
        response = urllib2.urlopen(request)
    
        print response.read()
    

    POST请求

    GET请求的请求参数是直接包含在URL中了,而POST请求的请求参数则不会出现在URL中,而是要经过单独的封装处理。所以,如果爬虫需要使用POST请求,就不能直接通过 URL + 请求参数 字符串拼接这种简单粗暴的方式了

    使用POST请求的Python爬虫案例

    访问百度贴吧的请求是GET类型的,而访问有道翻译的请求则是POST类型的。如下图所示,输入我在学习,点击翻译,地址栏中的URL没有变化,说明点击翻译后发送的请求是POST类型的,即无法再URL中看到参数
    这里写图片描述
    下面就是使用POST请求的Python爬虫程序,通过一个formdata 字典作为参数,当调用urllib2.Request类时,使用三个参数,即urllib2.Request(url, data = data, headers = headers),Python爬虫发送POST请求,使用两个参数urllib2.Request(newurl, headers=headers),Python爬虫发送GET请求

    # coding=utf-8
    
    import urllib
    import urllib2
    
    # POST请求的目标URL
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
    
    # 添加User-Agent,完善请求信息
    headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    
    formdata = {
        "type":"AUTO",
        "i":"i love python",
        "doctype":"json",
        "xmlVersion":"1.8",
        "keyfrom":"fanyi.web",
        "ue":"UTF-8",
        "action":"FY_BY_ENTER",
        "typoResult":"true"
    }
    
    data = urllib.urlencode(formdata)
    
    request = urllib2.Request(url, data = data, headers = headers)
    response = urllib2.urlopen(request)
    print response.read()
    展开全文
  • 查看JVM运行时参数

    万次阅读 2018-07-23 17:10:14
    查看运行中的java实例参数,如下设置的tomcat的最大内存 jinfo -flag MaxHeapSize 3556 下面通过jinfo -flag MaxHeapSize 7208 查看已经赋值过的参数信息   jinfo -flag UseG1GC 7208 查看垃圾...

    1.PrintFlagFinal

    java -XX:+PrintFlagsFinal -version

    • uintx InitialHeapSize                          := 62914560   表示已经改动过
    •  bool UseG1GC                                   = false  表示java -version这个指令并没有使用UseG1GC

     

    2.jps

    • Bootstrap代表tomcat
    • 25687 代表jps命令本身

     

    3.jinfo

    查看运行中的java实例参数,如下设置的tomcat的最大内存

    jinfo -flag MaxHeapSize  3556

    下面通过jinfo -flag MaxHeapSize 7208 查看已经赋值过的参数信息

     

    jinfo -flag UseG1GC 7208

    查看垃圾回收器

    展开全文
  • 如何获取浏览器URL中查询字符串中的参数 首先要了解的是URL中查询字符串中的参数是什么,例如有一个URL地址为:"http://www/book.com/jquery/bookmannager.html?channelid=12345&amp;name=xiaoming&...

    如何获取浏览器URL中查询字符串中的参数

    首先要了解的是URL中查询字符串中的参数是什么,例如有一个URL地址为:"http://www/book.com/jquery/bookmannager.html?channelid=12345&name=xiaoming&age=23";
    那么?号后边的一串字符就是获取到的参数,下面请看代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>获取URL中接收到的参数</title>
        </head>
        <body>
            <script type="text/javascript">
                window.onload = function() {
                    function getUrlPara(sHref) {
                        //获取问号
                        var args = sHref.split("?");
                        //无传入参数
                        if(args[0] == sHref) {
                            return "";
                        }
                        //对?后的参数进行处理
                        var arr = args[1].split("&");
                        var obj = {};
                        for(var i=0; i<arr.length; i++) {
                            var arg = arr[i].split("=");
                            obj[arg[0]] = arg[1];
                        }
                        return obj;
                    }
                    var URL = "http://www/book.com/jquery/bookmannager.html?channelid=12345&name=xiaoming&age=23";
                    var resultObj = getUrlPara(URL);
                    //打印结果
                    for(var key in resultObj) {
                        console.log(key + ":" + resultObj[key]);
                        document.write("<br>");
                    }
                }
            </script>
        </body>
    </html>
    

    最终打印出的结果为(控制台中):
    “channelid:12345”
    “name:xiaoming”
    “age:23”

    展开全文
  • SQL注入与参数查询

    千次阅读 热门讨论 2017-07-09 15:30:00
    SQL注入的本质SQL注入的实质就是通过SQL拼接字符串追加命令,导致SQL的语义发生了变化。为什么发生了改变呢? 因为没有重用以前的执行计划,而是对注入后的SQL语句重新编译,然后重新执行了语法解析。 所以要保证SQL...

    SQL注入的本质

    SQL注入的实质就是通过SQL拼接字符串追加命令,导致SQL的语义发生了变化。为什么发生了改变呢? 因为没有重用以前的执行计划,而是对注入后的SQL语句重新编译,然后重新执行了语法解析。 所以要保证SQL语义不变,(即想要表达SQL本身的语义,并不是注入后的语义)就必须保证执行计划确定不被改变。

    SQL注入的表现

    示例

    1.我们先熟悉一下表里的东西
    这里写图片描述


    2.要查询的原SQL语句。
    这里写图片描述


    3.注入的SQL语句
    这里写图片描述


    分析示例

    原SQL语句

    select COUNT(*) from T_Users where UserName  = 'a' and Password  ='b'

    语义:要查找(用户名为‘a’,密码为‘b’) 的用户总共有几个. 查询结果为1

    注入后的SQL语句

    select COUNT(*) from T_Users where UserName  = 'a' and Password  = 'b' or 1=1 --'

    注入后的语义:查找 (密码是a的,并且用户名是b的,) 或者1=1 的所有用户的数量。 这时候语义发生了改变,查询结果为4
    分析:如果用户在输入密码时, 输入的不是b 而是b’ or 1=1- - ,语义将会发生改变,(- -在数据库中是注释的标记)最后查询的结果当然也就不相同了。原语句的查询结果为1,注入后的查询结果为4。

    SQL注入的危害

    我们刚刚示范了SQL注入带来的查询结果的改变,这个可能会让别有用心的用户熟知我们数据库中的记录条数。或者如果输入的是b’ delect T_Users - - 这时候我们整张表都被删除了,这个带来的后果可想而知。

    防止SQL注入–参数化查询

    我们的机房重构中D层一直在用参数化查询,但是我当时没有完全理解用参数化查询的用意。直到现在才理解了为什么要用参数化查询和参数化查询如何防止SQL注入的。

    public int checkUser(Users user)
       {
        string sql = "select COUNT(*) from T_Users where UserName = @UserName and Password = @Password";
        SqlParameter[] paras ={new SqlParameter ("@UserName",User.username) ,
                                          new SqlParameter ("@Password",User.password)};
        int num = sqlhelper.ExecuteNonQuery(sql, paras);
        return num ;
       }

    这是我们用了参数化查询后的效果,我们来分析一下参数化查询是如何防止sql注入的。
    select count(*) from T_Users where UserName = ‘a’ and Password = ‘b’ or 1=1- -‘,
    是等到 UserName 参数传过来,才会去编译这条 sql语句(sql语句是编译后执行的),而这个时候, 这个拼接的sql 多了 or 选项,这改变了sql语句的本意。

    参数化查询:是先编译 这样一条sql, select count (*) from T_Users where = UserName = @UserName and Password = @Password ,和函数的编译一样, 这样的话,以后’b’ or 1=1- - ’ 只能作为 Password 的参数了,,,相当于你去查 ” ‘b’ or 1=1—’ ” 这个密码,而不是 查 “b” 这个密码 或者 ” 1=1 ” 了。 相当于把 or 给屏蔽掉了。or 原来是sql的一项(普通的拼接),现在就是个普通字符串参数(参数化查询)
    ,不能改变sql语义,也不能改变编译执行计划,所以防止了SQL注入。

    示例小结:

    正常的命令是程序中的“常量”,能动手脚的只能是可输入的用户名、密码这些可输入的“变量”。 拼接方式是将常量、变量拼在一起编译,才可以在正常的命令后追加命令。参数化的方式仅常量参与编译,就无法追加命令,防止了sql注入。

    总结

    参数化查询的方式简单来说就是指用参数参与编译,这样就全是常量了,编译执行计划时没有用到参数,所以命令是确定的。编译后计划便确定了,编译后传参数知识为了运行执行计划,执行计划不变,就不会多出命令,SQL语义就无法改变,防止了sql注入。

    展开全文
  • - query:这个就是查询条件,MongoDB默认的第一个参数。 - fields:(返回内容)查询出来后显示的结果样式,可以用true和false控制是否显示。 - limit:返回的数量,后边跟数字,控制每次查询返回的结果数量。...
  • MyBatis面试题(2020最新版)

    万次阅读 多人点赞 2019-09-24 16:40:33
    整理好的MyBatis面试题库,史上最全的MyBatis面试题,...MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plai...
  • ssh参数直接查询+参数的模糊查询

    千次阅读 2017-09-06 10:10:43
    1.如果ajax没有反映,没有运行,有可能是参数有错误,记得检查参数的问题 2.ssh中写的hql语句 带有参数:正常查询@Override public List<Usert> checkPassword(String username) { // TODO Auto-generated ...
  • 参数查询原理

    千次阅读 热门讨论 2017-02-08 15:13:45
    机房重构敲组合查询时,会遇到多个操作符(+、-、*、/),因为之前在使用参数查询时只要遇到给数据库赋值时就使用参数,(光知道这样能防止SQL注入,直到如今才知道它为什么能防止SQL注入)索性就把操作符也用成参数...
  • 1、首先建立隶属度函数,e,ec,kp,ki,kd的隶属度函数 2、建立仿真模型 双击模型将Fuzzy Logic命名为fuzzy,然后保存。 ...3、打开保存的fis文件,然后fuzzy=readfis('xxx')...然后点击运行,经过169次迭代, ...
  • linux查询正在运行的进程

    千次阅读 2018-07-13 11:27:49
     ps c 列出程序,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 ps -e 此参数的效果和指定"A"参数相同。 ps e 列出程序,显示每个程序所使用的环境变量。 ps f 用ASCII字符...
  • Springboot 显示Mybatis接口运行时的SQL以及参数 1.使用Springboot自带的logging日志系统 // 只需要添加如下配置即可 logging: level: com: wretch: dao: debug // 其中level下行的子属性,是你存放Mapper...
  • 查看程序运行的启动参数

    千次阅读 2017-11-03 22:39:44
    开始->运行,输入wmic 出现提示后,再输入process,就会显示素有进程的命令行信息 一般新启动的程序在最后一个
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    长选项必须用的参数在使用短选项也是必须的。 3.主要参数 --backup[=CONTROL]:为每个已存在的目的地文件进行备份。 -b:类似 --backup,但不接受任何参数。 -c:(此选项不作处理)。 -d,--...
  • Mysql系统参数查询和设置

    千次阅读 2018-10-16 11:46:04
    -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。 show table status; -- 显示当前使用或者...
  • 2、 使用jinfo -flag JVM参数名称 进程号 ,可以查看java进行信息 例如 查看PrintGCDetails是否开启 jinfo -flag PrintGCDetails 12576   3、 也可以使用jcmd VM.flags 直接查看JVM相关参数 
  • 下面查询,para参数是传入的,通过这个参数查询不同的列&lt;select id="getRecordByEqIdS" resultMap="BaseResultMap"&gt; SELECT el.#{para,jdbcType=VARCHAR}, el.pick_time FROM ...
  • 背景:测试hive,执行简单查询select count(*) from test.t1;,任务跑起来后卡住不动,也不报错,如下图: 原因:最后发现是参数:yarn.nodemanager.resource.memory-mb设置的太小导致的 进入CDH管理界面,Yarn的...
  • SQL参数查询

    万次阅读 2014-03-26 15:19:17
    SQL参数查询 一、以往的防御方式 以前对付这种漏洞的方式主要有三种: 字符串检测:限定内容只能由英文、数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝。但缺点是,系统 中不可避免地会有些内容包含...
  • 从离职的同事那里接手了一个项目开始改bug,然后就接触到了ibatis。...咳咳,下面讲如何获取ibatis运行时的动态SQL以及其参数。 假设我想获得这段调了ibatis接口的java代码所执行的sql语句以及其参数: n =
  • 各位大神,小弟刚接触c#时间不长,写了个程序,从界面上datatimepicker中取出时间,然后在c#代码的sql语句中设置时间参数,无论怎么设置要不就查不到数据,要不就是时间格式设置的不对,下面是代码 public ...
  • Top命令查询结果界面参数详解

    千次阅读 多人点赞 2019-04-24 11:28:13
    ​ 第二个参数:系统目前运行的时间:运行了33分钟 ​ 第三个参数:当前有多少人登录了这个系统: 1个 ​ 第四个参数:系统负载,既任务队列的平均长度,三个数值分别代表最近1分钟,5分钟,15分钟...
  • ASP.NET中参数查询

    千次阅读 2014-04-10 12:52:02
    在使用参数查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL指令的编译后,才套用参数运行,因此就算参数中含有恶意的指令,由于已经编译完成,就不会被数据库所运行...
  • 帆软报表参数多选查询

    千次阅读 2018-12-27 17:56:34
    帆软报表对下拉复选框以及下拉树多选查询获取参数 帆软默认对多选参数获取的格式为 xxx,xxx,xxx 用逗号的格式隔开,但是需要在数据库中用in查询数据...出来的结果值可以在报表中空白的单元格输入公式 =$参数名,运行...
  • Mysql运行状态查询命令及调优详解

    万次阅读 2016-07-11 23:24:47
    MySQL运行状态及调优(一) 一、查看MySQL运行情况 SHOW STATUS; 二、查看INNODB数据库引擎运行状态 SHOW ENGINE INNODB STATUS; 三、查看当前正在进行的进程,对于有锁表等情况的排查很有用处  SHOW ...
  • window查看运行程序的命令行参数

    千次阅读 2017-03-14 13:08:33
    window查看运行程序的命令行参数 标签: 编译器hook杀毒软件windowsexeshell 2010-07-23 14:55 7654人阅读 评论(0) 收藏 举报  分类: windows 核心编程(4) Vista相关(5)  版权...
  • 提示:在做小数据量查询测试,可以让hive将mrjob提交给本地运行运行,可以在hive会话中设置如下参数: hive&gt; set hive.exec.mode.local.auto=true;   基本查询示例 select * from t_access; ...
  • MySQL对子查询的优化

    万次阅读 2021-09-13 20:17:26
    查询语法 在一个查询语句A里的某个位置也可以有另一个查询语句B,这个出现在A 语句的某个位置中的查询B就被称为子查询,A也被称之为外层查询。子查询可 以在一个外层查询的各种位置出现, 子查询出现在SELECT子句...
  • 问题:  mybatis mapper将参数作为字段查询查询的表名 解决方案: ... 在传入的参数“字段名”作为select、create、alter等后面的查询或创建列,一定要使用“${column}”的格式,而不能使...
  • 每个kettle任务都会给定一个名称,当一个kettle任务开启的时候,如果 ps -ef | grep '想查询的kettle任务的名称',你会发现服务器会返回8条结果给你,其中有一条是你执行ps -ef 的指令(如果把这条结果通过grep -v ...
  • 场景:如何查看一个运行docker 容器的docker run启动参数,假设没有使用docker-compose这样的编排工具。现在我如何进行重启,如何找回此前的启动命令? 方法1:runlike参考 参考 用法:runlike<container-name...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 768,498
精华内容 307,399
关键字:

参数查询是通过运行查询时的