爬虫——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爬虫post请求_Python爬虫之GET和POST请求相关推荐

  1. python urllib post请求_python爬虫(五)_urllib2:Get请求和Post请求

    本篇将介绍urllib2的Get和Post方法,更多内容请参考:python学习指南 urllib2默认只支持HTTP/HTTPS的GET和POST方法 urllib.urlencode() urll ...

  2. python模拟app请求_python + 爬虫 + fiddler + 夜神模拟器 爬取app(1)

    抓包 抓包是爬虫里面经常用到的一个词,完整的应该叫做抓取数据请求响应包 ,而Fiddler这款工具就是干这个的 普通https抓包设置 打开Fiddler ------> Options .然后 ...

  3. python urllib发送post请求_python爬虫 urllib模块发起post请求过程解析

    urllib模块发起的POST请求 案例:爬取百度翻译的翻译结果 1.通过浏览器捉包工具,找到POST请求的url 针对ajax页面请求的所对应url获取,需要用到浏览器的捉包工具.查看百度翻译针对某 ...

  4. python requests的作用_Python爬虫第一课:requests的使用

    requests模块的入门使用 注意是requests不是request. 1.为什么使用requests模块,而不是用python自带的urllib requests的底层实现就是urllib re ...

  5. python爬虫面试问题_Python爬虫面试总结

    ## Python爬虫面试总结 1. 写一个邮箱地址的正则表达式? [A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$ 2. 谈 ...

  6. python爬虫requests实战_Python爬虫之requests库网络爬取简单实战

    实例1:直接爬取网页 实例2 : 构造headers,突破访问限制,模拟浏览器爬取网页 实例3 : 分析请求参数,构造请求参数爬取所需网页 实例4: 爬取图片 实例5: 分析请求参数,构造请求参数爬取 ...

  7. python爬虫好学不_python爬虫好学吗

    python爬虫难学吗 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现我们眼 ...

  8. python爬虫知识大全_Python爬虫入门有哪些基础知识点

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  9. python爬虫的用途_python爬虫用途

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 专业点来说就是应用多台机器同时实现爬虫任务,这多台机器上的爬虫,就是称作分布式爬 ...

  10. python爬取网页内容_Python爬虫原理解析

    笔者公众号:技术杂学铺 笔者网站:mwhitelab.com 本文将从何为爬虫.网页结构.python代码实现等方面逐步解析网络爬虫. 1. 何为爬虫 如今互联网上存储着大量的信息. 作为普通网民,我 ...

最新文章

  1. 计算机组成原理——概述1
  2. 11、修改和删除索引(DROP INDEX)
  3. 关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
  4. python中闭包详解
  5. Spring.NET 中的 ADO.NET 数据访问的示例
  6. PHP第三方登录—OAuth2.0协议
  7. Bailian2734 十进制到八进制【入门】(POJ NOI0113-45)
  8. ASCII编码:LinuxWindows
  9. 【c语言】调整数组使奇数所有都位于偶数前面
  10. 3650m5设置u盘启动_联想启天M425台式机设置u盘启动两种模式(支持uefi/bios双启动)...
  11. Zend Studio 13.6安装配置SVN注意
  12. 抖音终于活成了自己讨厌的样子
  13. Winform使用DSO Framer控件嵌入office 异常总结及解决方法
  14. 基于docker安装的rabbitmq如何安装rabbitmq_delayed_message_exchange-3.8.0.ez插件
  15. ElasticSearch控制should查询的精度(匹配个数)
  16. redis命令之set和zset的操作
  17. Java面试题总结及答案总结
  18. 计算机操作实践的课程描述,计算机操作系统课程设计实践报告-Read.DOC
  19. 手机上php视频格式怎么转成mp4,我想知道手机上用爱奇艺下的视频怎么转换成MP4格式...
  20. 人脸表情系列——人脸表情识别(Facial Expression Recognization/FER)

热门文章

  1. [解决]Win7 操作系统不能安装VMware
  2. SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法
  3. .Net开发中报表工具选择的体会心得
  4. Activity容器控件
  5. mysql标准化存储结构_Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql...
  6. cron表达式详解 Elastic-Job名次解释
  7. django 框架中应用 redis 集群(亲测)
  8. c语言中包含math.h的时用gcc编译要加-lm参数
  9. 小米网抢购系统开发实践和我的个人观察
  10. Linux下php添加新扩展