关于urlencode 的作用及 关于爬取贴吧的一个小案例

作用主要是当http 访问请求时,方便数据的传输

 

在python中 使用urllib.urlencode 进行转码

解码: urllib.urlquote 

 

在urllib2 中

 #作用: 构造一个请求对象(模拟浏览器访问,伪造信息。反反爬虫的第一步)

urllib2.Request(url.data = data, headers=headers) #此时post数据,默认data不写。便是get

#向指定的url发送请求,并返回服务器相应的类文件对象

urllib2.urlopen()

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import urllib
import urllib2
 
def loadPage(url, filename):
    """
        作用:根据url发送请求,获取服务器响应文件
        url: 需要爬取的url地址
        filename : 处理的文件名
    """
    print "正在下载 " + filename
    headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"}
 
    request = urllib2.Request(url, headers = headers)
    return urllib2.urlopen(request).read()
 
def writePage(html, filename):
    """
        作用:将html内容写入到本地
        html:服务器相应文件内容
    """
    print "正在保存 " + filename
    # 文件写入
    with open(filename, "w") as f:
        f.write(html)
    print "-" * 30
 
def tiebaSpider(url, beginPage, endPage):
    """
        作用:贴吧爬虫调度器,负责组合处理每个页面的url
        url : 贴吧url的前部分
        beginPage : 起始页
        endPage : 结束页
    """
    for page in range(beginPage, endPage + 1):
        pn = (page - 1) * 50
        filename = "" + str(page) + "页.html"
        fullurl = url + "&pn=" + str(pn)
        #print fullurl
        html = loadPage(fullurl, filename)
        #print html
        writePage(html, filename)
        print "谢谢使用"
 
if __name__ == "__main__":
    kw = raw_input("请输入需要爬取的贴吧名:")
    beginPage = int(raw_input("请输入起始页:"))
    endPage = int(raw_input("请输入结束页:"))
 
    url = "http://tieba.baidu.com/f?"
    key = urllib.urlencode({"kw": kw})
    fullurl = url + key
    tiebaSpider(fullurl, beginPage, endPage)

 

posted @ 2017-09-23 10:08  紫枫的天空  阅读(226)  评论(0编辑  收藏  举报