Python2的GET请求

# urllib 仅可以接受URL,不能创建 设置了headers 的Request 类实例。
# urllib 提供 urlencode 方法用来GET查询字符串的产生,而 urllib2 则没有。(这是 urllib 和 urllib2 经常一起使用的主要原因)。
# 编码工作使用urllib的urlencode()函数,帮我们将key:value这样的键值对转换成"key=value"这样的字符串。
# 解码工作使用urllib的unquote()函数。(注意,不是urllib2.urlencode())。
# 一般HTTP请求提交数据,需要编码成 URL编码格式。然后作为url的一部分,或者作为参数传到Request对象中。

import urllib
word = {"wd": "传智播客"}

# 通过urllib.urlencode()方法,将字典键值对按URL编码转换,从而能被web服务器接受。接收的参数是一个字典。
word = urllib.urlencode(word)
print word      # 结果:"wd=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2"

# 通过urllib.unquote()方法,把 URL编码字符串,转换回原先字符串。
word = urllib.unquote("wd=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2")
print word      # 结果:wd=传智播客
import urllib      #负责url编码处理
import urllib2

url = "http://www.baidu.com/s"
word = {"wd": "传智播客"}
word = urllib.urlencode(word) # 转换成url编码格式(字符串)
newurl = url + "?" + word     # url首个分隔符就是 ?

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, data=None, headers=headers)      # get请求可以不带参数data。
request.add_header("Authorization", "APPCODE " + "d108a3c6fb764d038abc48710fc55ffc")
request.add_header("Content-Type",  "application/x-www-form-urlencoded; charset=UTF-8")
request.get_header("Authorization")
request.get_header("Content-type")
response = urllib2.urlopen(request)
print response.read()
import urllib
import urllib2

def tiebaSpider(url, beginPage, endPage):
    for page in range(beginPage, endPage + 1):
        pn = (page - 1) * 50
        filename = "第" + str(page) + "页.html"
        # 组合为完整的 url,并且pn值每次增加50
        fullurl = url + "&pn=" + str(pn)

        # 调用loadPage()发送请求,获取HTML页面(服务器响应文件)
        html = loadPage(fullurl, filename)
        # 将获取到的HTML页面(服务器响应文件)写入本地磁盘文件
        writeFile(html, filename)

def loadPage(url, filename):
    print "正在下载" + filename
    headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
    request = urllib2.Request(url, headers=headers)
    response = urllib2.urlopen(request)
    # python3 爬取网页的写法如下:
    # request = urllib.request.Request(url, headers=headers)
    # response = urllib.request.urlopen(request)
    return response.read()

def writeFile(html, filename):
    print "正在存储" + filename
    with open(filename, 'wb') as f:
        f.write(html)

if __name__ == "__main__":
    kw = raw_input("请输入需要爬取的贴吧:")
    # 输入起始页和终止页,str转成int类型
    beginPage = int(raw_input("请输入起始页:"))
    endPage = int(raw_input("请输入终止页:"))

    url = "http://tieba.baidu.com/f?"
    key = urllib.urlencode({"kw": kw})

    # 组合后的url示例:http://tieba.baidu.com/f?kw=lol
    url = url + key
    tiebaSpider(url, beginPage, endPage)

Python2的POST请求

import urllib
import urllib2

newurl = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
headers = {"User-Agent": "Mozilla...."}
formdata = {
    "i": "i love python",
    "doctype": "json",
    "keyfrom": "fanyi.web",
}
data = urllib.urlencode(formdata)
request = urllib2.Request(newurl, data=data, headers=headers)      # post请求一定要带参数data。

request.add_header("Authorization", "APPCODE " + "d108a3c6fb764d038abc48710fc55ffc")
request.add_header("Content-Type",  "application/x-www-form-urlencoded; charset=UTF-8")
request.get_header("Authorization")
request.get_header("Content-type")

response = urllib2.urlopen(request)
print response.read()

# 上面我们说了Request请求对象里有data参数,它就是用在POST里的,我们要传送的数据就是这个参数data,data是一个字典,里面要匹配键值对。
# 发送POST请求时,需要特别注意headers的一些属性:
#   Content-Length: 144: 是指发送的表单数据长度为144,也就是字符个数是144个。
#   X-Requested-With: XMLHttpRequest :表示Ajax异步请求。
#   Content-Type: application/x-www-form-urlencoded : 表示浏览器提交 Web 表单时使用,表单数据会按照 name1=value1&name2=value2 键值对形式进行编码。

获取AJAX加载的内容

# -*- coding:utf-8 -*-
import urllib
import urllib2

url = "https://movie.douban.com/j/chart/top_list?"
# 处理所有参数
formdata = {
    'type':'11',
    'interval_id':'100:90',
    'action':'',
    'start': '0',
    'limit': '10'
}
url = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action"
# 变动的是这两个参数,从start开始往后显示limit个
formdata = {
    'start': '0',
    'limit': '10'
}
headers = {"User-Agent": "Mozilla...."}
data = urllib.urlencode(formdata)
request = urllib2.Request(url, data=data, headers=headers)
response = urllib2.urlopen(request)
print response.read()