温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python爬虫之GET和POST的区别

发布时间:2020-09-24 09:43:37 来源:亿速云 阅读:397 作者:Leah 栏目:编程语言

今天就跟大家聊聊有关Python爬虫之GET和POST的区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

爬虫——GET请求和POST请求

urllib.parse.urlencode()和urllib.parse.unquote()

编码工作使用urllib.parse的urlencode()函数,帮我们将key:value这样的键值对转换成"key=value"这样的字符串,解码工作可以使用urllib的unquote()函数。

# python3.5控制台中测试结果 >>> import urllib >>> word = {"wd":"爬虫"} # 通过urllib.parse.urlencode()方法,将字典键值对按URL编码转换,从而能被wed服务器接受。 >>> urllib.parse.urlencode(word) 'wd=%E7%88%AC%E8%99%AB' # 通过urllib.parse.unquote()方法,把URL编码字符串,转换回原先的字符串。 >>> urllib.parse.unquote(word) 'wd=爬虫'

一般HTTP请求提交数据,需要编码成URL编码格式,然后做为URL的一部分,或者作为参数传到Request对象中。

GET方式

GET请求一般用于我们向服务器获取数据,比如说,我们用百度搜索 爬虫:https://www.baidu.com/s?wd=爬虫(https://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB)

我们可以看到在请求部分里,http://www.baidu.com/s? 之后出现一个长长的字符串,其中就包含我们要查询的关键词“爬虫”,于是我们可以尝试用默认的GET方式来发送请求。

#!/usr/bin/python3 # -*- coding:utf-8 -*-   # 导入库 import urllib.request import urllib   url = "http://www.baidu.com/s?" word = {"wd":"爬虫"} # 转换成url编码格式 word = urllib.parse.urlencode(word) # 拼接成完整的url full_url = url + word # chrome 的 User-Agent,包含在 header里 header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'} # url 连同 headers,一起构造Request请求,这个请求将附带 chrome 浏览器的User-Agent request = urllib.request.Request(full_url, headers = header) # 向服务器发送这个请求 response = urllib.request.urlopen(request)   html = response.read() fo = open("baidu.html", "wb") fo.write(html) fo.close()

批量爬取贴吧页面数据

首先我们创建一个python文件:tiebaSpider.py,我们要完成的功能是,输入一个百度贴吧的地址,比如:百度贴吧LOL吧

第一页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=0

第二页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=50

第三页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=100

……

爬取以上页面的内容

#!/usr/bin/python3 # -*- coding:utf-8 -*-   """ 功能:批量爬取贴吧页面数据 目标地址:百度贴吧LOL吧 分析:     第一页:https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=0     第二页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=50     第三页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=100     …… 规律:     贴吧中每个页面URL不同之处,就是最后的pn值,其余的都是一样的。其pn = (page - 1) * 50     url = "https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn="     pn = (page - 1) * 50     full_url = url + str(pn) """   # 导入库 import urllib import urllib.request   # 根据url地址,获取服务器响应文件 def loadPage(url):     """     功能:根据url地址,获取服务器响应文件     :param url: url地址     :return: 获取的服务器响应文件信息     """     # chrome 的User-Agent 头     header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}     # url 连同 headers,一起构造Request请求,这个请求将附带 chrome 浏览器的User-Agent     request = urllib.request.Request(url, headers = header)     # 向服务器发送这个请求     reponse = urllib.request.urlopen(request)     # 获取响应文件中的全部内容     html = reponse.read()       return html   # 存储文件 def writeFile(html, file_name):     """     功能:存服务器响应文件到本地磁盘文件里     :param html: 服务器响应文件内容     :param file_name: 本地磁盘文件名     :return: None     """     with open(file_name, "wb") as f:         f.write(html)     # 贴吧爬虫函数 def tiebaSpider(url, begin_page, end_page):     """     功能:处理从begin_page到end_page的url页面     :param url: url地址     :param begin_page: 需爬取的起始页     :param end_page: 需爬取的终止页     :return:     """     for page in range(begin_page, end_page + 1):         pn = (page - 1) * 50         full_url = url + str(pn)         file_name = "第" + str(page) + "页.html"         print("正在爬取" + file_name)         # 获取full_url对应的html文件信息         html = loadPage(full_url)         print("正在存储" + file_name)         # 存储full_url对应的html文件信息         writeFile(html, file_name)   # 主函数 if __name__ == '__main__':     url = "https://tieba.baidu.com/f?"     # 输入需爬取的贴吧     kw = input("请输入需要爬取的贴吧:")     # 输入需爬取的起始页和终止页     begin_page = int(input("请输入起始页:"))     end_page = int(input("请输入终止页:"))     key = urllib.parse.urlencode({"kw":kw})     # 组合的的url示例:https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=     url = url + key + "&ie=utf-8&pn="     # 调用贴吧爬虫函数,爬取数据     tiebaSpider(url, begin_page, end_page)

POST方式

Request请求对象里有data参数,这就是用在POST里的,我们要传送的数据就是这个参数data,data是一个字典,里面要有匹配键值对。

以下以有道词典翻译网站为例为模拟POST请求。

#!/usr/bin/python3 # -*- coding:utf-8 -*-    """ POST方式:以有道词典翻译网站为例 url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null" """   # 导入库 import urllib.request import urllib url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null" # chrome 的 User-Agent,包含在 header里 header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}   word = input("请输入需要翻译的词条:")   from_data = {     "i":word,     "from":"AUTO",     "to":"AUTO",     "smartresult":"dict",     "doctype":"json",     "version":"2.1",     "keyfrom":"fanyi.wed" } data = urllib.parse.urlencode(from_data) data = data.encode(encoding="utf-8")  # str转bytes   request = urllib.request.Request(url, data = data, headers = header)   response = urllib.request.urlopen(request)   html = response.read().decode(encoding = "utf-8").strip()   print(html)

获取AJAX加载的内容

有些网页内容是使用AJAX加载的,AJAX一般返回的是JSON,直接对AJAX地址进行POST或GET,就能返回JSON数据。

#!/usr/bin/python3 # -*- coding:utf-8 -*-    """ 获取AJAX加载的数据 有些网页内容使用AJAX加载,只要记得,AJAX一般返回的是JSON,直接对AJAX地址进行post或get,就返回JSON数据了。 以豆瓣为例: url = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100:90&action&start=0&limit=100" """   # 导入库 import urllib import urllib.request   url = "https://movie.douban.com/j/chart/top_list?" # chrome 的 User-Agent,包含在 header里 header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'} from_data = {     'type':'11',     'interval_id':'100:90',     'action':'',     'start':'0',     'limit':'100' } data = urllib.parse.urlencode(from_data) data = data.encode(encoding="utf-8")  # str转bytes   request = urllib.request.Request(url, data = data, headers = header)   response = urllib.request.urlopen(request)   html = response.read().decode(encoding = "utf-8")   print(html)

看完上述内容,你们对Python爬虫之GET和POST的区别有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI