1、在python2和python3中的差异

在python2中,urllib和urllib2各有各自的功能,虽然urllib2是urllib的升级版,但是urllib2还是不能完全替代urllib,但是在python3中,全部封装成一个类,即urllib

python2中urllib2和urllib的区别:

Urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接受一个URL。这就意味着你不能通过urllib伪装自己的请求头。Urllib模板可以提供运行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具备这样的功能,而且urllib.quote等一系列quote和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助。这就是urllib和urllib2一起使用的原因,quote用来url转码的

import urllib.requesturllib.request.Request(url, data=None, headers = {}, method= None)

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3', 'Referer': 'http://www.lagou.com/zhaopin/Python/?labelWords=label', 'Connection': 'keep-alive' }

http的头信息可以直接使用字典的形式

Request如果要发送data,并无法直接传入字典类型的参数,需要进行数据转换,你可以直接使用类似于get传出参数的方法,也可以使用urllib给我们提供的类

from urllib import request, parsedata = {'first': 'true', 'pn': 1, 'kd': 'Python'}data = parse.urlencode(data).encode('utf-8')print(data)

#结果:b'first=true&pn=1&kd=Python‘urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None)urlencode()主要作用就是将url附上要提交的数据。Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码

urllib.request.urlopen(url, data=None, timeout=None)

  • url    需要打开的网站
  • data    psot提交的数据
  • Timeout       网站访问的超时时间

但是没法伪装我们的头信息

from urllib import requestreq = request.Request(url, headers=headers, data=data)html = request.urlopen(req).read()

2、urllib的下载

from urllib import request

url = "http://inews.gtimg.com/newsapp_match/0/2711870562/0"request.urlretrieve(url, "1.jpg")

或者通过

from urllib import request

url = "http://inews.gtimg.com/newsapp_match/0/2711870562/0"req = request.Request(url)res = request.urlopen(req)text = res.read()with open("2.jpg", "wb") as f: f.write(text)

3、urllib的代理

from urllib import request, parse

data = {'first': 'true', 'pn': 1, 'kd': 'Python' }url = 'http://2017.ip138.com/ic.asp'

proxy = request.ProxyHandler({'http': '112.95.61.146:8118'}) # 设置proxyopener = request.build_opener(proxy) # 挂载opener# opener = request.build_opener() # 挂载openerrequest.install_opener(opener) # 安装openerdata = parse.urlencode(data).encode('utf-8')page = opener.open(url, data).read()print(type(page))print(page.decode("gbk"))

结果:<body style="margin:0px"><center>您的IP是:[112.95.61.146] 来自:广东省深圳市 联通</center></body></html>

4、urllib的cookie使用

如果已经知道cookie,或者说你是通过抓包获取到的cookie,直接放在header的信息中直接登陆就可以,登陆京东网站的cookie信息和不登录京东的cookie信息是不一样的,你可以登录京东以后,抓取cookie的信息,然后访问任何网站就可以了

import urllib.requesturl = "http://www.jd.com"header = {"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", "cookie": "xxxxx"}req = urllib.request.Request(url=url, headers=header)res = urllib.request.urlopen(req)text = res.read()

5、urllib的cookie相关的类

  • 在python2中cookie的类叫做:import cookielib
  • 在python3中cookie的类叫做:import http.cookiejar

6、opener的概念

  • 当你获取一个URL你使用一个opener(一个urllib2 OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen
  • urlopen是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout
  • 如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置

7、终端输出cookie对象

import urllib.requestimport http.cookiejar

url = "http://www.hao123.com"req = urllib.request.Request(url)cookiejar = http.cookiejar.CookieJar()handler = urllib.request.HTTPCookieProcessor(cookiejar)opener = urllib.request.build_opener(handler)r = opener.open(req)print(cookiejar)

输出:<CookieJar[<Cookie BAIDUID=93B415355E0704B2BC94B5D514468898:FG=1 for .hao123.com/>, <Cookie hz=0 for .www.hao123.com/>, <Cookie ft=1 for www.hao123.com/>, <Cookie v_pg=normal for www.hao123.com/>]>

8、Cookie保存到文件中

import urllib.requestimport http.cookiejar

url = "http://www.hao123.com"req = urllib.request.Request(url)

cookieFileName = "cookie.txt"cookiejar = http.cookiejar.MozillaCookieJar(cookieFileName)#文件cookiehandler = urllib.request.HTTPCookieProcessor(cookiejar)opener = urllib.request.build_opener(handler)r = opener.open(req)print(cookiejar)cookiejar.save()

保存在了文件cookie.txt中

MozillaCookieJar继承FileCookieJar()继承CookieJar

9、Cookie从文件中读取cookie信息并访问

import urllib.requestimport http.cookiejarcookie_filename = 'cookie.txt'cookie = http.cookiejar.MozillaCookieJar(cookie_filename)cookie.load(cookie_filename, ignore_discard=True, ignore_expires=True)print(cookie)url = "http://www.hao123.com"req = urllib.request.Request(url)handler = urllib.request.HTTPCookieProcessor(cookie)opener = urllib.request.build_opener(handler) # 利用urllib2的build_opener方法创建一个openerresponse = opener.open(req)

print(response.read().decode(“utf-8”))#解决乱码的问题

转载于:https://www.cnblogs.com/Jweiqing/p/9189367.html

爬虫二(urllib模块)相关推荐

  1. Python爬虫之urllib模块2

    Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...

  2. Python爬虫进阶——urllib模块使用案例【淘宝】

    Python爬虫基础--HTML.CSS.JavaScript.JQuery网页前端技术 Python爬虫基础--正则表达式 Python爬虫基础--re模块的提取.匹配和替换 Python爬虫基础- ...

  3. 网络爬虫---用urllib模块爬取京东笔记本电脑的数据、并对其做一个可视化

    用urllib模块爬取京东笔记本电脑的数据.并对其做一个可视化 文章目录 用urllib模块爬取京东笔记本电脑的数据.并对其做一个可视化 一.前言 二.知识要求 三.过程分析 1.观察主页面和每个电脑 ...

  4. Python 爬虫二 requests模块

    requests模块 Requests模块 get方法请求 整体演示一下: import requestsresponse = requests.get("https://www.baidu ...

  5. Python 爬虫基础 - Urllib 模块(1)

    Python的一个很广泛的功能就是爬虫.爬虫可以获取我们需要的资料,甚至进行DDos的工具.爬虫现在比较流行的是Scrapy之类的模块,但是在学习这些工具之前,先了解一下Urllib模块,知道他的基本 ...

  6. pythonurllib模块-python爬虫之urllib模块和requests模块学习

    今天学习了request模块和urllib模块,了解到这两个模块最大的区别就是在爬取数据的时候连接方式的不同.urllb爬取完数据是直接断开连接的,而requests爬取数据之后可以继续复用socke ...

  7. Python爬虫【urllib模块】

    通用爬虫 爬虫的一般流程 1 初始化一批URL,将这些URL放入队列 2 从队列中取出这些URL,通过DNS解析IP,对IP对应的网站下载HTML页面,保存到本地服务器中,爬取完的URL放到已爬取队列 ...

  8. 爬虫----request简介(以及urllib模块和request模块保存图片区别)

    request模块简介 request模块 一.安装 二.request常用方法 三.响应对象response的方法 保存图片案例 request模块 保存图片 request模块 第一种保存图片的方 ...

  9. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签...

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 ...

  10. python爬虫-urllib模块

    urllib 模块是一个高级的 web 交流库,其核心功能就是模仿web浏览器等客户端,去请求相应的资源,并返回一个类文件对象.urllib 支持各种 web 协议,例如:HTTP.FTP.Gophe ...

最新文章

  1. PCL显示法线no override found vtkactor
  2. 【蓝桥java】递归基础之车辆进出栈
  3. java常见的异常类型_Java几种常见的异常类型
  4. java基础知识回顾之javaIO类总结
  5. JS 表单和表单元素
  6. boost::range模块strided相关的测试程序
  7. Istio流量管理实践之(5): 使用cert-manager部署Istio自定义入口网关及进行证书管理...
  8. Shell中的特殊字符
  9. log4j2 xsd_Log4j 2.x XSD的描述不完整
  10. 二叉排序树删除子节点以及遍历
  11. mysql命令行进入报错ERROR 2002 (HY000)
  12. Git Bash使用详细教程
  13. 手机看html 图片,手机HTML怎么看
  14. Java我的世界forge安装失败,我的世界forge安装失败install怎么办
  15. Java笔记23反射,设计模式
  16. 知乎live-李笑来-人人都能用英语-笔记
  17. 关于Google您的连接不是私密连接问题的解决方法 (Chrome 地址栏 Google 搜索错误处理 隐私设置错误)
  18. python从云端服务器读数据_云服务器简单实现Python自动运维
  19. 正确写出doublecheck的单例模式
  20. city-picker城市代码

热门文章

  1. 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
  2. php有哪些开源社区,PHP开源社区
  3. 【CodeForces - 599C 】Day at the Beach(思维)
  4. 【蓝桥杯 - 真题】六角幻方(dfs+剪枝)
  5. 【牛客 - 289K】这是一个沙雕题III(贪心,思维枚举,技巧trick,计算上下界)
  6. 【牛客 - 283F】出装方案(最小费用最大流)
  7. docker jenkins 公钥_代码自动发布docker(20.10.1)+k8s(1.20.1)
  8. define定义的是什么类型_DEFINE_PROFILE用法介绍(1)
  9. 计算机课禁用监视器,如何设置关闭监视器硬盘系统待机项为从来不
  10. python的命令解析getopt.getopt()函数分析