热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python爬虫之GET和POST的区别

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

今天就跟大家聊聊有关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的区别有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程笔记行业资讯频道,感谢大家的支持。


推荐阅读
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了常用#免费%代理IP库&整理*收藏——实时@更新(大概)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Python爬取豆瓣数据实现过程解析
    这篇文章主要介绍了Python爬取豆瓣数据实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值, ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
author-avatar
情系50后_989
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有