1、Url的格式简单介绍,如下图:

2、我们要对网站进行访问,需要用到python中的一个模块或者说一个包吧,urllib(这个在python2中是urllib+urllib2,python3将这两个合并为一)

Urllib这个包内有几个模块,我们用最难的那个就可以啦,哈哈哈,request模块。

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

url: 网站地址 data:Post要提交的数据 (不写的话默认为get请求) timeout:设置网站的访问超时时间

直接用urllib.request模块的urlopen()获取页面,html的数据格式为bytes类型,需要decode()解码,转换成str类型。

举个简单的实例,我们爬取百度的网址:

importurllib.request as urt #模块别名

response= urt.urlopen(r"https://www.cnblogs.com/") #获取博客地址内容

html=response.read() #因为是一个对象,所以用读的方式将内容读出

html= html.decode('utf-8')      #因为是二进制(byte的类型)的字符串,要解码成unicodeprint(html)

urlopen返回对象提供方法:

read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作。

info():返回HTTPMessage对象,即服务器返回的头信息。

getcode():返回Http状态码。

geturl():返回请求的url地址。

urllib.request.urlopen实际上执行的是两个动作,先是urllib.request.Request(url)然后再urlopen这个对象,因此我们可以通过Request来包装请求,然后再通过urlopen来访问地址。

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

importurllib.request

url= r'http://www.lagou.com/zhaopin/Python/?labelWords=label'

#以字典形式添加,当然有些只需要添加User-Agent 即可

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

req= urllib.request.Request(url, headers=headers) #这里可以添加header头

page=urllib.request.urlopen(req).read()

page= page.decode('utf-8')print(page)

用来包装头部的数据:

User-Agent :这个头部可以携带如下几条信息:浏览器名和版本号、操作系统名和版本号等

Referer:可以用来防止盗链,有一些网站图片显示来源http://***.com,就是检查Referer来鉴定的

Connection:表示连接状态,记录Session的状态。

刚刚开始的时候我们用urlopen做了get请求,现在我们试试post请求,以下面实例进行讲解:

from urllib importrequest, parse

url= r'https://www.lagou.com/jobs/companyAjax.json?needAddtionalResult=false&isSchoolJob=0'headers={'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36','Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label','Connection': 'keep-alive'}

data={'first': 'true','pn': 1,'kd': 'Java'}

data= parse.urlencode(data).encode('utf-8') #Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码

req= request.Request(url, headers=headers, data=data) #也可以将data数据在urlopen中再传入

page=request.urlopen(req).read()

page= page.decode('utf-8')print(page)

这里需要注意下:urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None),这个是将数据格式变成人家能看懂的数据,经过urlencode()转换后的data数据为URL后面加上?first=true?pn=1?kd=Java

当然,有些网站为了防止别人爬虫或者恶意访问,可能会做诸多限制,比如发现同一个ip一秒内下载了几十张图片,那么这肯定就有可能不是正常访问,因此很可能就会判断为爬虫或者其它,然后发个验证码让你输入,为了避免这种情况出现,于是乎我们使用代理的方式进行访问,例子如下:

urllib.request.ProxyHandler(proxies=None)

importurllib.requestimportrandom

url= 'http://www.whatismyip.com.tw'iplist= ['180.149.131.67:80','27.221.93.217:80','111.2.122.46:8080']

proxy_support= urllib.request.ProxyHandler({'http':random.choice(iplist)})

opener=urllib.request.build_opener(proxy_support)

opener.addheaders= [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/5')]

urllib.request.install_opener(opener)

response=urllib.request.urlopen(url)

html= response.read().decode('utf-8')print(html)

上面是代码,我们来详细说下整个过程:

1、首先我们先创建一个代理处理器 ProxyHandler,ProxyHandler是一个类,其参数是一个字典,上面就是我们的iplist,我们本来也可以写一个ip,但是由于免费的代理ip不稳定,因此我们写成了一个列表,然后每次随机从列表中取出一个代理Ip。

什么是Handler?Handler也叫作处理器,每个handlers知道如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面,例如HTTP重定向或者HTTP cookies。

2、定制(创建)一个opener,opener = urllib.request.build_opener(proxy_support)

什么是opener?python在打开一个url链接时,就会使用opener。其实,urllib.request.urlopen()函数实际上是使用的是默认的opener,只不过在这里我们需要定制一个opener来指定handler。

3、安装opener,urllib.request.install_opener(opener),install_opener 用来创建(全局)默认opener,这个表示调用urlopen将使用你安装的opener,当然你也可以不用安装,你可以直接opener.open(url),修改上面的代码为:

importurllib.requestimportrandom

url= 'http://www.whatismyip.com.tw'iplist= ['180.149.131.67:80','27.221.93.217:80','111.2.122.46:8080']

proxy_support= urllib.request.ProxyHandler({'http':random.choice(iplist)})

opener=urllib.request.build_opener(proxy_support)

opener.addheaders= [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/5')]#urllib.request.install_opener(opener) #注释了这一行,下一行修改为 opener.open(url),但是我们这样修改如果使用urlopen的话就不会打开我们特制的opener,因此这个看需求而定。

response =opener.open(url)

html= response.read().decode('utf-8')print(html)

下面说下异常处理,详细就不多说了,看下就知道了,如下:

from urllib importrequest, parse

url= r'https://www.lagou.com/jobs/companyAjax.json?needAddtionalResult=false&isSchoolJob=0'headers={'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36','Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label','Connection': 'keep-alive'}

data={'first': 'true','pn': 1,'kd': 'Java'}

data= parse.urlencode(data).encode('utf-8') #Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码

try:

req= request.Request(url, headers=headers, data=data) #也可以将data数据在urlopen中再传入

page =request.urlopen(req).read()

page= page.decode('utf-8')print(page)excepterror.HTTPError as e:print(e.code())print(e.read().decode('utf-8'))

零基础学python爬虫-零基础学习python_爬虫(53课)相关推荐

  1. 学python需要什么基础-学Python需要什么基础知识?零基础可以学Python吗?

    学Python需要什么基础知识?一般来说,想要学Python最好具备一定的计算机专业知识,尤其是数学和英语不错的话,对学Python也有一定的帮助.但是零基础的学习者就不能学Python了吗?当然不是 ...

  2. 零基础学python电子书-零基础学Python

    准备自学Python朋友,不放来看看<零基础学Python>吧!小编这里为各位送上的是这本书的全彩PDF版,该书从初学者角度出发,通过通俗易懂的语言.流行有趣的实例,详细地介绍了使用IDL ...

  3. 零基础学python难_0基础学python有多难

    相对于其他编程语言来说,Python并不是很难,入门简单,容易上手,对于零基础的人来说,入门Python是不难的,但是想要学精学通,则要花费一定的时间和精力.Python是主流的编程语言,应用性非常高 ...

  4. 有c语言基础学python容易吗_学习Python需要先学C语言吗?0基础学Python难度大吗?

    今天小编要跟大家分享的文章是关于学习Python需要先学C语言吗?0基础学Python难度大吗?想要学习或者了解Python相关知识就来和小编一起看一看本篇文章吧! 1.学Python需要先学C语言吗 ...

  5. 零基础学python实战-零基础学习python_类和对象(36-40课)

    今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...

  6. 零基础自学python教程-零基础学Python不迷茫——基本学习路线及教程

    什么是Python? 在过去的2018年里,Python成功的证明了它自己有多火,它那"简洁"与明了的语言成功的吸引了大批程序员与大数据应用这的注意,的确,它的实用性的确是配的上它 ...

  7. 零基础学python实战-苦苦发愁学习Python?让你享受 7天 掌握Python的感觉

    Python的优势是什么? 大数据时代,越来越多的人开始把python应用到数据分析领域,因为pyhton在表格操作.数据可视化等方面有其独特的优势,主要体现在以下3个方面: 一是编程上手快 pyth ...

  8. 零基础学python电子书-零基础入门学习Python epub高清电子书

    作者: 小甲鱼 出版社: 清华大学出版社 出版年: 2016-11-1 下载地址(回复可见) 此处内容需要评论回复后 内容简介 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过 ...

  9. 零基础学python还是c语言-学习python还是c语言?

    并不是大神,只是CS专业的一名小学生.先说结论,强烈推荐先学C. 简单地说,你用半年时间学C语言,学会之后,再去学C++只需三个月,学python这种东西只要一个月,牛逼的人一个星期也能掌握. 可是反 ...

  10. 零基础学python书籍-0基础学python,有什么教程或者书可以推荐吗?

    推荐两本适合小白的python书籍,希望能对你有所帮助. <python编程从入门到实践> /> 本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分: ...

最新文章

  1. vue仿今日头条_vue2.0仿今日头条开源项目
  2. 博客园Markdown新建笔记
  3. How to remove the dotted border on Active link state---移除链接激活时出现的虚线
  4. 深入浅出聊聊 Rust WebAssembly(一)
  5. LiveVideoStackCon讲师热身分享 ( 十三 ) —— Intel QSV技术在FFmpeg中的实现与使用
  6. kv存储对抗关系型数据库
  7. php 解析数组,如何用PHP解析array数组
  8. LightOJ 1013 LCS+记忆化搜索
  9. 【js与jquery】导航下拉菜单效果
  10. 【事件驱动】【数码管识别】(C++动态链接库的封装和调用)
  11. php二维数组引用变量,PHP二维数组的引用赋值容易犯的错误
  12. dpl直播源_上千个高清无码直播源,爽歪歪!
  13. 程序化广告 - 小抄
  14. QListView的使用
  15. NC—NCC常用数据库表
  16. Vue子组件的显示与隐藏
  17. 剪辑过的视频md5会改变
  18. Linux红帽认证工程师(RHCE)考试笔记(Ansible学习笔记)
  19. 计算机毕业设计ssm基于web的社团管理系统r848z系统+程序+源码+lw+远程部署
  20. python 人民币兑美元汇率代码_人民币对美元汇率的大数据分析与预测【完整代码】...

热门文章

  1. java-com-util-common-service:BaseService.java
  2. .NET开发微信小程序-微信支付
  3. 字符串按长度转换成数组
  4. 15-07-05 语句-跳转语句异常语句
  5. Xcode学习C++(三、const)
  6. const和readonly内部区别
  7. ASP.net中页面事件的先后顺序
  8. 13. python 类
  9. 【模拟】谁拿了最多奖学金
  10. (笔记)Mysql命令select from:查询表中的数据(记录)