urllib.urlencode()
urllib和urllib2都是接受URL请求的相关模块,但是提供了不同的功能。两个最显著的不同如下:
1.urllib仅可以接受URL,不能创建设置headers的Request实例;
2.但是urllib提供urlencode方法用来GET查询字符串的产生,而urllib2则没有。(这是urllib和urllib2经常一起使用的主要原因)
3.编码同作使用urllib的urlencode()函数,帮我们讲key:value这样的键值对转换成"key=value"这样的字符串,解码工作可以使用urllib的unquote()函数。(注意,不是urllib2.urlencode())
注意:举例是用3.6版本,如果是urllib,我们就要用urllib.parse。
举例一:
举例二:
爬取贴吧。
import urllib.request import urllib.parse def loadPage(url,filename): """ 作用:根据url发送请求,获取服务器响应文件 url:需要爬取的url地址 filename:处理的文件名 :return: """ print("正在下载"+filename) headers = {"User-Agent" : "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"} request=urllib.request.Request(fullurl,headers=headers) return urllib.request.urlopen(request).read() def writePage(html,filename): """ 作用:将html内容写入到本地 html:服务器响应文件内容 :param html: :return: """ print("正在保存"+filename) #文件写入 with open(filename,"w") as f: f.write(str(html)) print("-"*30) def tiebaSpider(url,beginPage,endPage): """ 作用:贴吧爬虫调度器,负责组合处理每个页面的url url:贴吧url的前部分 beginPage:起始页 endPage:结束页 :return: """ 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 = input("请输入需要爬取的贴吧名:") beginPage = int(input("请输入起始页:")) endPage = int(input("请输入结束页:")) url = "http://tieba.baidu.com/f?" key = urllib.parse.urlencode({"kw": kw}) fullurl = url + key tiebaSpider(fullurl,beginPage,endPage)