爬虫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部
posted @ 2018-03-08 17:00  耐烦不急  阅读(205)  评论(0编辑  收藏  举报