爬虫——GET请求和POST请求

编程入门 行业动态 更新时间:2024-10-23 11:26:59

<a href=https://www.elefans.com/category/jswz/34/1770264.html style=爬虫——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请求一般用于我们向服务器获取数据,比如说,我们用百度搜索 爬虫:=爬虫(=%E7%88%AC%E8%99%AB)

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

#!/usr/bin/python3
# -*- coding:utf-8 -*-
__author__ = 'mayi'# 导入库
import urllib.request
import urlliburl = "?"
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吧

第一页:=lol&ie=utf-8&pn=0

第二页:=lol&ie=utf-8&pn=50

第三页:=lol&ie=utf-8&pn=100

……

爬取以上页面的内容

#!/usr/bin/python3
在学习过程中有什么不懂得可以加
我的python学习交流扣扣qun,688244617
群里有不错的学习教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容。# -*- coding:utf-8 -*-
__author__ = 'mayi'"""
功能:批量爬取贴吧页面数据
目标地址:百度贴吧LOL吧
分析:第一页:=lol&ie=utf-8&pn=0第二页:=lol&ie=utf-8&pn=50第三页:=lol&ie=utf-8&pn=100……
规律:贴吧中每个页面URL不同之处,就是最后的pn值,其余的都是一样的。其pn = (page - 1) * 50url = "=lol&ie=utf-8&pn="pn = (page - 1) * 50full_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-Agentrequest = 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) * 50full_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 = "?"# 输入需爬取的贴吧kw = input("请输入需要爬取的贴吧:")# 输入需爬取的起始页和终止页begin_page = int(input("请输入起始页:"))end_page = int(input("请输入终止页:"))key = urllib.parse.urlencode({"kw":kw})# 组合的的url示例:=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 -*-
__author__ = 'mayi'"""
POST方式:以有道词典翻译网站为例
url = "=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
"""# 导入库
import urllib.request
import urllib
url = "=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转bytesrequest = 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 -*-
__author__ = 'mayi'"""
获取AJAX加载的数据
有些网页内容使用AJAX加载,只要记得,AJAX一般返回的是JSON,直接对AJAX地址进行post或get,就返回JSON数据了。
以豆瓣为例:
url = "=11&interval_id=100:90&action&start=0&limit=100"
"""# 导入库
import urllib
import urllib.requesturl = "?"
# 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转bytesrequest = urllib.request.Request(url, data = data, headers = header)response = urllib.request.urlopen(request)html = response.read().decode(encoding = "utf-8")print(html)

更多推荐

爬虫——GET请求和POST请求

本文发布于:2023-07-28 22:05:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1335939.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   POST

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!