Python爬虫基础-01-带有请求参数的爬虫
在上一篇文章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-带有请求参数的爬虫相关推荐
- Python爬虫:scrapy框架请求参数meta、headers、cookies一探究竟
对于scrapy请参数,会经常用到,不过没有深究 今天我就来探索下scrapy请求时所携带的3个重要参数headers, cookies, meta 原生参数 首先新建myscrapy项目,新建my_ ...
- 跳槽涨薪技术之python+pytest接口自动化(6)-请求参数格式的确定
[文章末尾给大家留下了大量的福利] 我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请 ...
- python post请求参数错误,爬虫POST请求Json格式不清楚报错原因
说说你想干嘛吧 你的网址 我输入到浏览器 得到的是这个东东 啥东东 看不懂的东东 if(typeof Com == "undefined") Com={}; if(typeo ...
- python面向对象基础-01
面向对象(OOP)基本概念 前言 话说三国时期曹军于官渡大败袁绍,酒席之间,曹操诗兴大发,吟道:喝酒唱歌,人生真爽! 众将直呼:"丞相好诗",于是命印刷工匠刻板印刷以流传天下;待工 ...
- Datawhale组队学习-Python编程基础-01
文章目录 变量.运算符与数据类型 1.注释 2.运算符 3.变量和赋值 4.数据类型与转换 5.print()函数 练习题 位运算 1.原码.反码和补码 2.按位非操作~ 3.按位与操作& 4 ...
- Python编程基础01:搭建Python开发环境
文章目录 一.Python概述 (一)Python为何物 (二)Python的发展前景 1.IEEE Spectrum排行榜 2.TIOBE编程语言排行榜 3.了解Python招聘数据 (三)Pyth ...
- python爬虫日记01
PYTHON爬虫日记01 记录自己的学习爬虫日记 选用python作为编程语言 1.环境准备 python3.6+ mysql pycharm 2.思路 以爬取猫眼top100为目标 1.分析ur ...
- 3.每天进步一点点-Python爬虫需要了解HTTP 请求报文
14天学习训练营导师课程: 杨鑫<Python 自学编程基础> 杨鑫< Python 网络爬虫基础> 杨鑫< Scrapy 爬虫框架实战和项目管理> 文章目录 1. ...
- Python爬虫基础-如何获取网页源代码
Python爬虫基础-如何获取网页源代码 网络爬虫(Web Crawler),又称网页蜘蛛(Web Spider),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.爬虫程序根据一组特定的规则 ...
- 2018 Python零基础大神运维自动化就业教程最新版Python运维就业 1-5部分
本文为博主整理文章 下载地址:http://www.yixueit.com/forum.php?mod=viewthread&tid=1312&extra=page%3D1&_ ...
最新文章
- [物理学与PDEs]第2章第5节 一维流体力学方程组的 Lagrange 形式 5.1 引言
- 推荐:一本“高颜值”的R语言数据可视化图书(包邮送3本)
- python根目录_Pycharm使用嵌入式Python
- 蹦球传说诺基亚java_bouncetales蹦球传说
- 人生哲理---你值得借鉴
- ZeptoN正在将程序放入Java
- arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图
- 【ASP.NET】基础补习之验证控件
- 单自由度阻尼强迫振动通解求导及simulink验证(修正了网上常见的错误)
- [文摘20071015]图书目录: 哈佛精粹30条-浓缩哈佛大学领袖培养方案之精华
- HBase跨版本数据迁移总结
- Spring boot mqtt客户端
- 四、OSPF配置实验
- 小程序tabBar不显示?
- PostgreSQL11.2下载
- easyphp 登陆mysql_EasyPHP 16.1.1无法启动MySQL
- 厦门大学计算机保研学校,厦门大学计算机科学系(专业学位)计算机技术保研夏令营...
- python 伪造源ip_Python实现爬虫设置代理IP和伪装成浏览器的方法共享
- STM32的内部参照电压VREFINT(1.2V)和ADC参考电压Vref+如何区分呢
- 参加珠海苹果售后维修体验
热门文章
- mouseenter 延迟_低延迟电竞蓝牙耳机,南卡Lifte Pro安卓手机上的无线舒适体验
- 更改计算机复制快捷键,电脑上怎么把一句话设置快捷键,电脑快捷键复制一句话-...
- mysql8连接 2002_ERROR 2002 mysql连接失败 解决方法
- SQL:postgresql查询七天内数据
- java 内存屏障_关于Java中的内存屏障
- oracle job 与存储过程,讲解Oracle中JOB与存储过程的接合用法
- 数值分析(7)-正交多项式
- 图像直方图及直方图均衡总结(一)经典方法(附matlab和opencv端算法实现)
- Java Web J2EE下的两大框架SSH和SSM对比
- Delphi Sysem.JSON 链式写法(转全能中间件)