zoukankan      html  css  js  c++  java
  • 爬虫4_python2

    import urllib2
    response = urllib2.urlopen("https://www.baidu.com")
    print response.read()

    构造Requset

    其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容。

    比如上面的两行代码,我们可以这么改写:

    import urllib2
    request = urllib2.Request("https://www.baidu.com")
    response = urllib2.urlopen(request)
    print response.read()
    

    运行结果是完全一样的,只不过中间多了一个request对象,推荐大家这么写,因为在构建请求时还需要加入好多内容,通过构建一个request,服务器响应请求得到应答,这样显得逻辑上清晰明确。

    GET方法

    import urllib
    import urllib2
    
    values={}
    values['username'] = "993484988@qq.com"
    values['password']="XXXX"
    data = urllib.urlencode(values)
    url = "http://passport.csdn.net/account/login"
    geturl = url + "?"+data
    request = urllib2.Request(geturl)
    response = urllib2.urlopen(request)
    print response.read()
    print geturl
    

     可以通过print geturl,打印输出一下url,发现其实就是原来的url加?然后加编码后的参数 http://passport.csdn.net/account/login?username=993484988%40qq.com&password=XXXX

    POST方法

    import urllib
    import urllib2
    
    values = {"username":"993484988@qq.com","password":"XXXX"}
    data = urllib.urlencode(values) 
    url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
    request = urllib2.Request(url,data)
    response = urllib2.urlopen(request)
    print response.read()
    

    说明:

      我们引入了urllib库,现在我们模拟登陆CSDN,当然上述代码可能登陆不进去,因为还要做一些设置头部header的工作,或者还有一些参数 没有设置全,还没有提及到在此就不写上去了,

    在此只是说明登录的原理。我们需要定义一个字典,名字为values,参数我设置了username和 password,下面利用urllib的urlencode方法将字典编码,命名为data,构建request时传入两个参数,

    url和data,运行程序,即可实现登陆,返回的便是登陆后呈现的页面内容

    伪造请求头信息

    #coding=utf-8
    
    import urllib2
    import sys
    
    #抓取网页内容-发送报头-1
    url= "http://www.phpno.com"
    send_headers = {
        'Host':'www.phpno.com',
        'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Connection':'keep-alive'
    }
    
    req = urllib2.Request(url,headers=send_headers)
    r  = urllib2.urlopen(req)
    # ...省略后面的代码...
    

    通过 help(urllib2)可以查看这个模块中的很多类以及方法  

     

    通过urlopen().info() 可以查看到很多的操作方法

    urllib和urllib2的区别

    • urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以通过urllib模块伪装你的User Agent字符串等(伪装浏览器)。
    • urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
    • urllib2模块比较优势的地方是urlliburllib2.urlopen可以接受Request对象作为参数,从而可以控制HTTP Request的header部
  • 相关阅读:
    当你输入一个网址的时候,实际会发生什么?
    HTTP响应报文与工作原理详解
    DNS系统的解析原理
    spark-streaming集成Kafka处理实时数据
    python分布式环境下的限流器
    使用spark与MySQL进行数据交互的方法
    Linux Redis集群搭建与集群客户端实现
    commons-pool与commons-pool2连接池(Hadoop连接池)
    Kazoo Python Zookeeper 选主
    SpringMVC拦截器Interceptor
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/8529486.html
Copyright © 2011-2022 走看看