Urllib2库丨Python爬虫基础入门系列(12)
提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达
文章目录
- 前言
- Urllib2库
- 学习目的
- urlopen
- GET请求方式
- 利用urllib2.Request类,添加Header信息
- POST请求方式
- 抓取招聘信息
- 思考一下
- 小结
- 总结
前言
Urllib2库
urllib2是python2.7自带的模块(不需要下载),它支持多种网络协议,比如 FTP、HTTP、HTTPS等
urllib2在python3.x中被改为urllib.request
话不多说,开始学习
Urllib2库
学习目的
利用urllib2提供了一个接口 urlopen函数
urllib2 官方文档
https://docs.python.org/2/library/urllib2.html
urlopen
urlopen(url, data, timeout,....)
(1)第一个参数url即为URL,第一个参数URL是必须要传送的
(2)第二个参数data是访问URL时要传送的数据,data默认为空None
(3)第三个timeout是设置超时时间,timeout默认为 60s(socket._GLOBAL_DEFAULT_TIMEOUT)
GET请求方式
以抓取 http://www.itcast.cn为例
import urllib2
response = urllib2.urlopen('http://www.itcast.cn/')
data = response.read()
print data
print response.code
保存成 demo.py,进入该文件的目录,执行如下命令查看运行结果,感受一下。
python demo.py
利用urllib2.Request类,添加Header信息
利用urllib2.Request方法,可以用来构造一个Http请求消息
help(urllib2.Request)
正则:headers 转dict
^(.*):\s(.*)$
"\1":"\2",
# -*- coding: utf-8 -*-
import urllib2
get_headers={'Host': 'www.itcast.cn','Connection': 'keep-alive','Pragma': 'no-cache','Cache-Control': 'no-cache','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',#此处是压缩算法;不便于查看,要做解压#'Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'zh-CN,zh;q=0.8','Cookie': 'pgv_pvi=7044633600; tencentSig=6792114176; IESESSION=alive; pgv_si=s3489918976; CNZZDATA4617777=cnzz_eid%3D768417915-1468987955-%26ntime%3D1470191347; _qdda=3-1.1; _qddab=3-dyl6uh.ireawgo0; _qddamta_800068868=3-0'}
request = urllib2.Request("http://www.itcast.cn/",headers=get_headers)
#request.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')
response = urllib2.urlopen(request)
print response.code
data = response.read()
print data
Q:为什么这两种写法都对?
A:一个headers没写,另一个写了都好使;原因是web服务器能够理解请求数据,并且没有做验证机制
POST请求方式
抓取招聘信息
http://www.lagou.com/jobs/list_?px=new&city=%E5%85%A8%E5%9B%BD#order
# -*- coding: utf-8 -*-
import urllib2
import urllib
proxy_handler = urllib2.ProxyHandler({"http" : 'http://192.168.17.1:8888'})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
Sum = 1
output = open('lagou.json', 'w')
for page in range(1,Sum+1): formdata = 'first=false&pn='+str(page)+'&kd='print '运行到第 (%2d) 页面' %(page)send_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','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Accept': 'application/json, text/javascript, */*; q=0.01',' X-Requested-With': 'XMLHttpRequest'}request =urllib2.Request('http://www.lagou.com/jobs/positionAjax.json?px=new&needAddtionalResult=false',headers=send_headers)#request.add_header('X-Requested-With','XMLHttpRequest')#request.headers=send_headersrequest.add_data(formdata)print request.get_data()response = urllib2.urlopen(request)print response.coderesHtml =response.read()#print resHtmloutput.write(resHtml+'\n')
output.close()
print '-'*4 + 'end'+'-'*4
思考一下
- 如果要采集的是 北京>>朝阳区>>望京 地区的职位,以这个网站为例,该如何理解这个url
http://www.lagou.com/jobs/list_?px=default&city=%E5%8C%97%E4%BA%AC&district=%E6%9C%9D%E9%98%B3%E5%8C%BA&bizArea=%E6%9C%9B%E4%BA%AC#filterBox
urlencode编码/解码在线工具
# -*- coding: utf-8 -*-
import urllib2
import urllib
query = {'city':'北京','district':'朝阳区','bizArea':'望京'
}
print urllib.urlencode(query)
page =3
values = {'first':'false','pn':str(page),'kd':'后端开发',
}
formdata = urllib.urlencode(values)
print formdata
小结
Content-Length: 是指报头Header以外的内容长度,指 表单数据长度
X-Requested-With: XMLHttpRequest :表示Ajax异步请求
Content-Type: application/x-www-form-urlencoded
表示:提交的表单数据 会按照name/value 值对 形式进行编码
例如:
name1=value1&name2=value2...
name 和 value 都进行了 URL 编码(utf-8、gb2312)
在线测试字符串长度
总结
Urllib2库丨Python爬虫基础入门系列(12) 就到这啦,在学爬虫的老铁记得持续关注噢!阿星祝你早日修炼成为爬虫大佬!当然,如果你准备系统地学爬虫及更多Python编程技术,可戳我文末的名片,Free领取最新Python爬虫资料/免费咨询/学习规划~
戳我名片 · 领取福利
Urllib2库丨Python爬虫基础入门系列(12)相关推荐
- 结构化数据丨Python爬虫基础入门系列(7)
提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 JSON 1. json.loads() 2. json.dumps() 3. json.dump() 4 ...
- python爬虫基础入门理论篇(下)
网络基础 2.1.网络协议 2.1.1什么是协议? 协议可以理解为"规则",是数据传输和数据的解释规则,下图是简单图解 2.1.2.OSI七层参考模型 物理层:可以理解为我们的网线 ...
- Python爬虫基础入门(二)——列表
知识 1.列表的定义与访问 列表的格式 nameList = ['xiaozhang','xiaowang','xiaohua'] 比起C语言的数组强大的地方在于Python列表中的元素可以是不同类型 ...
- Python爬虫基础入门
爬取的网址:https://www.23hh.com/book/0/189/ 需求:获取小说的章节目录及其对应的章节内容 需要的库:requests.BeautifulSoup和re.利用reques ...
- python基础代码库-python爬虫基础教程:requests库(二)代码实例
get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...
- 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)
提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...
- Python爬虫基础库(RBX)的实践_田超凡
转载请注明原作者:田超凡 20190410 CSDN博客:https://blog.csdn.net/qq_30056341# Python爬虫基础库RBX指的是:Requests Beautiful ...
- python爬虫基础-requests库
python爬虫基础-requests库 python爬虫 1.什么是爬虫? 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程. 注意:浏览器抓取的数据对应的页面是一个完整的页面. 为什 ...
- Python爬虫从入门到精通——解析库pyquery的使用
分类目录:<Python爬虫从入门到精通>总目录 解析库使用篇: 解析库re的使用:正则表达式 解析库XPath的使用 解析库Beautiful Soup的使用 解析库pyquery的使用 ...
最新文章
- 二分查找式的debug
- Tomcat+Apache 负载均衡
- Scala学习第五天数组
- FileOutputStream为false时候注意的问题
- Fence(CF-324F)
- 判断用户是否已经登录
- 量化策略回测唐安奇通道
- vector中针对自定义类型的排序
- TimeUnit类中的sleep() 和Thread.sleep()
- 多功能笔记工具Notability创建甜甜圈图案的趣味教程
- [NOI2003]文本编辑器
- php7 switch,Switch autocommit on or off - PHP 7 中文文档
- IDEA设置主题样式
- 最全5G手机芯片简史
- 新买的移动硬盘不显示盘符?西部数据SSD无痛初始化指南
- 瑞尔森大学的计算机科学专业,瑞尔森大学专业介绍
- torch.randn和torch.rand有什么区别
- 我们仨——快乐的湘军
- torch.bmm()验证
- Python搭建代理池爬取拉勾网招聘信息
热门文章
- mysql的ace什么概念,饭圈ace是什么意思 全能ace多用于团体详细含义揭秘
- html背景音乐不断,HTML插入背景音乐方法【全】
- 听了一个毕业十年学长讲座后总结的感想
- JAVA计算机毕业设计学校食堂订餐管理Mybatis+源码+数据库+lw文档+系统+调试部署
- 黑白图片切换shader
- cibc app for android,cibc mobile banking app
- 如何恢复被删除的word自动保存文件,也就是恢复文件
- IIS 如何设置首页
- OpenGL置换贴图
- 手写promise原理系列七:封装Promise.reject方法,Promise.reject的用法