ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] > 1. python 3.x中urllib库和urilib2库合并成了urllib库。。 > 2. 其中urllib2.urlopen()变成了urllib.request.urlopen() > 3. urllib2.Request()变成了urllib.request.Request() ## 1. url编码 > url编码解码,又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。 现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有encodeURI、encodeURIComponent,PHP有 urlencode、urldecode等。编码方法很简单,在该字节ascii码的的16进制字符前面加%. 如 空格字符,ascii码是32,对应16进制是'20',那么urlencode编码结果是:%20 例如百度搜索 中华人民共和国,会把真实的汉字进行url转码,每三个用%号分割的字符串代表一个字符 ![](https://box.kancloud.cn/1397fce0f2f35ce64396830124d9563f_806x154.png) 复制出来是这样 `https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=monline_3_dg&wd=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD` ~~~ In [3]: from urllib import parse In [8]: parse.urlencode({"wq":"中华人民共和国"}) # 传入一个字典代表请求的键值对 Out[8]: 'wq=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD' In [9]: print(parse.unquote("%E4%B8%AD")) 中 ~~~ ## 2. 简单爬取百度贴吧 ~~~ from urllib import request,parse """ 爬取贴吧某一话题数据 """ header = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0" } # with自动关闭文件连接,因为默认写入是gbk编码,但是我们的数据是urf-8 # 所以encoding="utf-8" def writeFile(filename,data): with open(str(filename),"w",encoding="utf-8") as file: file.write(data) # 导入具体某一页 def loadPage(url): requests = request.Request(url,headers = header) response = request.urlopen(requests) data = response.read().decode("utf-8") return data # 循环遍历每一页 def detectPage(url,start,end): for page in range (start,end+1): print(page) page_num = (page-1) * 50 num = parse.urlencode({"pn":page_num}) search_url = url + "&" + num print(search_url) result = loadPage(search_url) writeFile(page,result) if __name__ == "__main__": key = input("输入贴吧关键字:") url = "http://tieba.baidu.com/f?ie=utf-8&" start_page = input("输入起始页:") end_page = input("输入结束页:") searchurl = url + parse.urlencode({"kw":key}) detectPage(searchurl,int(start_page),int(end_page)) ~~~ ## 3. cookie ~~~ Python2 import cookilib Python3 from http import cookiejar ~~~