在上一篇文章Python爬虫入门中,Python爬虫程序爬取了指定网页的信息,爬虫发出的请求是一个固定的URL和部分请求信息,并没有请求参数,但是爬虫工作过程中发出的请求一般都需要加上请求参数,以完成对指定内容的爬取

HTTP请求分为POST请求和GET请求,在Python爬虫中,这两种请求因其结构不同,所以添加请求参数的方式也不同,下面将分别介绍使用POST请求和GET请求的Python爬虫

GET请求

使用GET请求的Python爬虫比较简单,由于GET请求的请求参数包含在URL地址中,所以只需要先确定请求参数,然后将请求参数拼接到URL中即可,即 URL + 请求参数(字符串拼接)

使用GET请求的Python爬虫案例

首先,一个使用GET请求访问网页的例子。如下图所示,使用百度,以“爬虫”为关键字进行查询,可以看到,地址栏的URL为:https://www.baidu.com/s?word=爬虫。我们可以使用这个URL地址利用爬虫爬取该网页

我们写一个可以使用和上面一样的GET请求的Python爬虫程序,需要用到urlllib2包

# coding=utf-8import urllib2url = "http://www.baidu.com/s"
word = {"wd":"爬虫"}
# url首个分隔符是 ?
newurl = url + "?" + word     # 添加User-Agent,完善请求信息
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}request = urllib2.Request(newurl, headers=headers)response = urllib2.urlopen(request)print response.read()

程序写好后,直接运行会报错,这是因为请求参数需要进行编码转换,在使用浏览器访问时,这个转换是浏览器自动完成的。但是在Python爬虫程序中,这一步就需要程序员自己来完成了。编码转换需要使用urllib包

# coding=utf-8import urllib      #负责url编码处理
import urllib2url = "http://www.baidu.com/s"
word = {"wd":"爬虫"}
# 将请求参数转换成url编码格式(字符串)
word = urllib.urlencode(word)
# url首个分隔符是 ?
newurl = url + "?" + word     # 添加User-Agent,完善请求信息
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}request = urllib2.Request(newurl, headers=headers)response = urllib2.urlopen(request)print response.read()

运行程序,控制台打印的信息如下,爬取成功

使用GET请求的Python爬虫的应用

在使用Python爬虫爬取一个有分页的网站时,各个页面的URL非常接近,唯一的不同就是页码数字不同,这是使用GET请求能非常简单方便的将该网站的各个页面爬取下来

如下图,Python吧的第一页的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0
第二页的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
第三页的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=100
可以看出URL中只有pn参数在变化,它控制着到底访问该吧的那一页,发现了这个规律后,就可以通过一个循环,切换URL地址中的参数从而将整个贴吧中所有页面的内容都爬取下来

# coding=utf-8import urllib
import urllib2url = "http://tieba.baidu.com/f?kw=python&ie=utf-8&pn="i = 0
while i<1000:i = i +50newurl = url + i   # 添加User-Agent,完善请求信息headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}request = urllib2.Request(newurl, headers=headers)response = urllib2.urlopen(request)print response.read()

POST请求

GET请求的请求参数是直接包含在URL中了,而POST请求的请求参数则不会出现在URL中,而是要经过单独的封装处理。所以,如果爬虫需要使用POST请求,就不能直接通过 URL + 请求参数 字符串拼接这种简单粗暴的方式了

使用POST请求的Python爬虫案例

访问百度贴吧的请求是GET类型的,而访问有道翻译的请求则是POST类型的。如下图所示,输入我在学习,点击翻译,地址栏中的URL没有变化,说明点击翻译后发送的请求是POST类型的,即无法再URL中看到参数

下面就是使用POST请求的Python爬虫程序,通过一个formdata 字典作为参数,当调用urllib2.Request类时,使用三个参数,即urllib2.Request(url, data = data, headers = headers),Python爬虫发送POST请求,使用两个参数urllib2.Request(newurl, headers=headers),Python爬虫发送GET请求

# coding=utf-8import urllib
import urllib2# POST请求的目标URL
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"# 添加User-Agent,完善请求信息
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}formdata = {"type":"AUTO","i":"i love python","doctype":"json","xmlVersion":"1.8","keyfrom":"fanyi.web","ue":"UTF-8","action":"FY_BY_ENTER","typoResult":"true"
}data = urllib.urlencode(formdata)request = urllib2.Request(url, data = data, headers = headers)
response = urllib2.urlopen(request)
print response.read()

Python爬虫基础-01-带有请求参数的爬虫相关推荐

  1. Python爬虫:scrapy框架请求参数meta、headers、cookies一探究竟

    对于scrapy请参数,会经常用到,不过没有深究 今天我就来探索下scrapy请求时所携带的3个重要参数headers, cookies, meta 原生参数 首先新建myscrapy项目,新建my_ ...

  2. 跳槽涨薪技术之python+pytest接口自动化(6)-请求参数格式的确定

    [文章末尾给大家留下了大量的福利] 我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请 ...

  3. python post请求参数错误,爬虫POST请求Json格式不清楚报错原因

    说说你想干嘛吧 你的网址 我输入到浏览器 得到的是这个东东   啥东东  看不懂的东东 if(typeof Com == "undefined") Com={}; if(typeo ...

  4. python面向对象基础-01

    面向对象(OOP)基本概念 前言 话说三国时期曹军于官渡大败袁绍,酒席之间,曹操诗兴大发,吟道:喝酒唱歌,人生真爽! 众将直呼:"丞相好诗",于是命印刷工匠刻板印刷以流传天下;待工 ...

  5. Datawhale组队学习-Python编程基础-01

    文章目录 变量.运算符与数据类型 1.注释 2.运算符 3.变量和赋值 4.数据类型与转换 5.print()函数 练习题 位运算 1.原码.反码和补码 2.按位非操作~ 3.按位与操作& 4 ...

  6. Python编程基础01:搭建Python开发环境

    文章目录 一.Python概述 (一)Python为何物 (二)Python的发展前景 1.IEEE Spectrum排行榜 2.TIOBE编程语言排行榜 3.了解Python招聘数据 (三)Pyth ...

  7. python爬虫日记01

    PYTHON爬虫日记01 记录自己的学习爬虫日记 选用python作为编程语言 1.环境准备 python3.6+ mysql pycharm 2.思路 以爬取猫眼top100为目标 ​ 1.分析ur ...

  8. 3.每天进步一点点-Python爬虫需要了解HTTP 请求报文

    14天学习训练营导师课程: 杨鑫<Python 自学编程基础> 杨鑫< Python 网络爬虫基础> 杨鑫< Scrapy 爬虫框架实战和项目管理> 文章目录 1. ...

  9. Python爬虫基础-如何获取网页源代码

    Python爬虫基础-如何获取网页源代码 网络爬虫(Web Crawler),又称网页蜘蛛(Web Spider),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.爬虫程序根据一组特定的规则 ...

  10. 2018 Python零基础大神运维自动化就业教程最新版Python运维就业 1-5部分

    本文为博主整理文章 下载地址:http://www.yixueit.com/forum.php?mod=viewthread&tid=1312&extra=page%3D1&_ ...

最新文章

  1. [物理学与PDEs]第2章第5节 一维流体力学方程组的 Lagrange 形式 5.1 引言
  2. 推荐:一本“高颜值”的R语言数据可视化图书(包邮送3本)
  3. python根目录_Pycharm使用嵌入式Python
  4. 蹦球传说诺基亚java_bouncetales蹦球传说
  5. 人生哲理---你值得借鉴
  6. ZeptoN正在将程序放入Java
  7. arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图
  8. 【ASP.NET】基础补习之验证控件
  9. 单自由度阻尼强迫振动通解求导及simulink验证(修正了网上常见的错误)
  10. [文摘20071015]图书目录: 哈佛精粹30条-浓缩哈佛大学领袖培养方案之精华
  11. HBase跨版本数据迁移总结
  12. Spring boot mqtt客户端
  13. 四、OSPF配置实验
  14. 小程序tabBar不显示?
  15. PostgreSQL11.2下载
  16. easyphp 登陆mysql_EasyPHP 16.1.1无法启动MySQL
  17. 厦门大学计算机保研学校,厦门大学计算机科学系(专业学位)计算机技术保研夏令营...
  18. python 伪造源ip_Python实现爬虫设置代理IP和伪装成浏览器的方法共享
  19. STM32的内部参照电压VREFINT(1.2V)和ADC参考电压Vref+如何区分呢
  20. 参加珠海苹果售后维修体验

热门文章

  1. mouseenter 延迟_低延迟电竞蓝牙耳机,南卡Lifte Pro安卓手机上的无线舒适体验
  2. 更改计算机复制快捷键,电脑上怎么把一句话设置快捷键,电脑快捷键复制一句话-...
  3. mysql8连接 2002_ERROR 2002 mysql连接失败 解决方法
  4. SQL:postgresql查询七天内数据
  5. java 内存屏障_关于Java中的内存屏障
  6. oracle job 与存储过程,讲解Oracle中JOB与存储过程的接合用法
  7. 数值分析(7)-正交多项式
  8. 图像直方图及直方图均衡总结(一)经典方法(附matlab和opencv端算法实现)
  9. Java Web J2EE下的两大框架SSH和SSM对比
  10. Delphi Sysem.JSON 链式写法(转全能中间件)