Python3学习(34)--简单网页内容抓取(爬虫入门一)
基础讲多了也不好,懂的人看了烦躁,半懂的人看多了没耐心,我也不能打消了你们学习Python的积极性了,开始爬虫系列基础篇之前,先上一张图,给大脑充充血:
很多人,学习Python,无非两个目的,一个就是纯粹玩(确实好玩),一个就是为了上面这张毛爷爷(确实能换钱),我是二者兼有,至少不清高,也不爱财。
在Python中,有一个模块,叫urllib,专门就是为了读取web页面中的数据,还记得Python的鸭子类型吗,“file-like object”,走起路子只要像鸭子,那么它就可以被当做鸭子。因此,我们可以像读写本地文件那样去读写web数据,只要拿到url,我们就可以拿到我们需要的对象,只要拿到对象,我们就可以赋予鸭子生命,从而享受美味的鸭肉(data)
直接上demo,说再多,不如敲一遍demo,亲自感受一下
getHtml.py
#!/usr/bin/env Python3
# -*- encoding:utf-8 *-*'''@author = 'Appleyk' '''
'''@time = '2017年9月23日11:42:32' '''from urllib import requestdef getResponse(url):#url请求对象 Request是一个类url_request = request.Request(url)print("这个对象的方法是:",url_request.get_method())#上下文管理器,HTTPResponse 对象,包含一系列方法url_response = request.urlopen(url) #打开一个url或者一个Request对象'''geturl():返回 full_url地址info(): 返回页面的元(Html的meta标签)信息<meta>:可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。getcode(): 返回响应的HTTP状态代码 100-199 用于指定客户端应相应的某些动作。200-299 用于表示请求成功。 ------> 200300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。400-499 用于指出客户端的错误。 ------> 404500-599 用于支持服务器错误。 read(): 读取网页内容,注意解码方式(避免中文和utf-8之间转化出现乱码)'''return url_response #返回这个对象http_response = getResponse("http://dzh.mop.com/") #拿到http请求后的上下文对象(HTTPResponse object)
print(http_response) #打印这个对象
执行的结果,我们等会再放出来,我们先来介绍一下,urllib模块的request功能。
(1)首先你得去请求一个url地址(网址),拿到Request对象,或者你不拿到Request的对象,直接在第二步中,使用url地址(字符串)也行
(2)其次,你要将这个Reques对象作为request.urlopen函数的参数,以获得请求后的http上下文对象,也就是http response对象,这个对象,还是很有料的,正是我们所需要的,当然,参数也可以直接是一个url字符串。
我们借助Python自带的解析器,利用help函数,参照原形,对(1)和(2)中提到的内容做进一步说明
url_request = request.Request(url)
url_response = request.urlopen(url) 或者 url_response = request.urlopen(url_request)
打开一个URL类型的 url,既可以是一个字符串也可以是一个Request对象
函数总是返回一个对象,一个可以工作的上下文管理器,其中具有的方法如下
具体说明,看demo里面的注释,下面,我们来打印一下这个response对象
使用HTTPResponse对象的方法
A、geturl()
B、 info()
C、getcode()
D、read()
我们拿到了网页内容,我们要干嘛呢? 我们翻一下,这个网页,看能不能找到一些图片的url信息(当然,博主肯定是事先在浏览其中打开了这个url地址,不然,我们怎么能返回200呢!)
还真有,但是有多少个呢,我们引入re模板库,使用正则表达式,列出来这些xxxxxx.jpg有多少个(何必亲自一个个去数呢),demo改进如下:
getHtml.py:
#!/usr/bin/env Python3
# -*- encoding:utf-8 *-*'''@author = 'Appleyk' '''
'''@time = '2017年9月23日11:42:32' '''from urllib import request
import re #使用正则表达式def getResponse(url):#url请求对象 Request是一个类url_request = request.Request(url)#print("Request对象的方法是:",url_request.get_method())#上下文使用的对象,包含一系列方法#url_response = request.urlopen(url) #打开一个url或者一个Request对象url_response = request.urlopen(url_request)'''geturl():返回 full_url地址info(): 返回页面的元(Html的meta标签)信息<meta>:可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。getcode(): 返回响应的HTTP状态代码 100-199 用于指定客户端应相应的某些动作。200-299 用于表示请求成功。 ------> 200300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。400-499 用于指出客户端的错误。 ------> 404500-599 用于支持服务器错误。 read(): 读取网页内容,注意解码方式(避免中文和utf-8之间转化出现乱码)'''return url_response #返回这个对象def getJpg(data):jpglist = re.findall(r'src="http.+?.jpg"',data)return jpglisthttp_response = getResponse("http://dzh.mop.com/") #拿到http请求后的上下文对象(HTTPResponse object)
#print(http_response.read().decode('utf-8'))
data = http_response.read().decode('utf-8')
L = getJpg(data)global n #声明全局变量n
n = 1
for jpginfo in L:print(n,'--->',jpginfo)n = n+1
执行下,看下效果:
怎么下载到本地呢?很简单,urllib模板库,给我们提供的有现成的方法,如下
request的方法urlretrieve,只需要传前两个参数,一个是图片的url地址,一个是图片的本地文件名称
方法说明:............指向本地磁盘,说白了就是下载
注意,我们要的不是
src="http://images01.mopimg.cn/imgs/20170922/20170922112551_0e2a19a344fb2f1c27ef438365587a78.jpg"
而是src的值--->
http://images01.mopimg.cn/imgs/20170922/20170922112551_0e2a19a344fb2f1c27ef438365587a78.jpg
因此,我们需要在上述demo的基础上再定义一个下载方法,给urlretrieve函数传第一个参数的时候,需要再次用到正则表达式,来得到真正意义上的 url 图片 地址!
直接上终极demo,如下
gethtml.py:
#!/usr/bin/env Python3
# -*- encoding:utf-8 *-*'''@author = 'Appleyk' '''
'''@time = '2017年9月23日11:42:32' '''from urllib import request
import re #使用正则表达式def getResponse(url):#url请求对象 Request是一个类url_request = request.Request(url)#print("Request对象的方法是:",url_request.get_method())#上下文使用的对象,包含一系列方法#url_response = request.urlopen(url) #打开一个url或者一个Request对象url_response = request.urlopen(url_request)'''geturl():返回 full_url地址info(): 返回页面的元(Html的meta标签)信息<meta>:可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。getcode(): 返回响应的HTTP状态代码 100-199 用于指定客户端应相应的某些动作。200-299 用于表示请求成功。 ------> 200300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。400-499 用于指出客户端的错误。 ------> 404500-599 用于支持服务器错误。 read(): 读取网页内容,注意解码方式(避免中文和utf-8之间转化出现乱码)'''return url_response #返回这个对象def getJpg(data):jpglist = re.findall(r'src="http.+?.jpg"',data)return jpglist
def downLoad(jpgUrl,n):#request.urlretrieve(jpg_link, path)try:request.urlretrieve(jpgUrl,'%s.jpg' %n) except Exception as e:print(e)finally:print('图片%s下载操作完成' % n)http_response = getResponse("http://dzh.mop.com/") #拿到http请求后的上下文对象(HTTPResponse object)
#print(http_response.read().decode('utf-8'))
data = http_response.read().decode('utf-8')
#print(data)
global n
n = 1
L = getJpg(data)
for jpginfo in L:print(jpginfo)s = re.findall(r'http.+?.jpg',jpginfo)downLoad(s[0],n)n= n +1
没执行demo下载之前,我们看一下我们当前的可执行路径
来,我们执行一下demo,真是满怀期待,有点小忐忑
如果,你的网速很快的话,效果就是刷刷刷的,如果你的网速比较慢,这个效果就是一个个蹦出来的,我们检查一下,是不是真的下载下来了(我保证,最开始的url地址里面的图片,我没看过!)
美女警察在哪呢,在这儿呢,我们放大看
本篇作为一个入门级的爬虫案例,意在说明,想要抓取web资源,必须先要进行url请求,然后就是一系列的对象操作,为什么是入门级的呢?
(1)不涉及url循环遍历
(2)不涉及多线程
(3)不涉及复杂正则表达式
(4)不涉及算法
(5)不涉及数据层面的存储
(6)不涉及网络带宽
(7)..................................
等等等等,我们初学Python的时候,一上来就想要搞什么爬虫,你写爬虫,我写蜘蛛,反正都是虫子,我只想说,没有那么简单,如果毛爷爷人人都好挣了,那就没什么技术可言了。 因此,打好基础很重要,入门思想的培养很重要,心里不浮躁也很重要,总之,在没有两把刷子之前,老老实实多看,多写,多敲,多思考,借鉴别人的思想,来发挥自己的长处,有朝一日,你也是虫师!
Python3学习(34)--简单网页内容抓取(爬虫入门一)相关推荐
- python爬虫抓收费图片_简单的抓取淘宝图片的Python爬虫
写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品. 从网页http://mm.taobao.com/json/request_top_list.htm?type ...
- python学习之——利用urllib2抓取网页内容
简单的抓取程序 #!/usr/bin/env python #-*- coding:utf-8 -*- import sys import urllib2 wp = urllib2.urlopen(' ...
- python—简单数据抓取七(采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用,利用ip池访问网页并将scrapy爬取转移到items的数据存入到数据库)
学习目标: Python学习二十七-简单数据抓取七 学习内容: 1.采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用 2.利用ip池访问网页并将scrapy爬取转移到it ...
- 小猪的Python学习之旅 —— 20.抓取Gank.io所有数据存储到MySQL中
小猪的Python学习之旅 -- 20.抓取Gank.io所有数据存储到MySQL中 标签:Python 一句话概括本文: 内容较多,建议先mark后看,讲解了一波MySQL安装,基本操作,语法速成, ...
- 为何大量网站不能抓取?爬虫突破封禁的6种常见方法
为何大量网站不能抓取?爬虫突破封禁的6种常见方法 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于用"网络数据采集",有时会把网络数据采 ...
- 基于学习的机械臂抓取研究综述
1.基于学习的机械臂抓取研究综述 Kleeberger, K., Bormann, R., Kraus, W. et al. A Survey on Learning-Based Robotic Gr ...
- python—简单数据抓取三(简单IP地址代理、利用蘑菇代理实现IP地址代理刷新本地ip地址、利用蘑菇代理实现IP地址代理抓取安居客信息并实现多线程)
学习目标: python学习二十三 -数据抓取三. 学习内容: 1.简单IP地址代理 2.利用蘑菇代理实现IP地址代理刷新本地ip地址 3.利用蘑菇代理实现IP地址代理抓取安居客信息并实现多线程 1. ...
- python—简单数据抓取四(利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站、利用百度云的ocr识别自如租房网价格图片获取到自如网的价格)
学习目标: python学习二十四 -简单数据抓取四 学习内容: 1.利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站 2.利用百度云的ocr识别自如租房网的价格图片,获取到自如网的价格数据 1.利 ...
- 使用php简单网页抓取和内容分析,使用PHP简单网页抓取和内容分析_php
没事的时候想抓取点网页看看,也不太懂,只是玩玩,写了点代码,聊以娱乐. 稍微有点意义的函数是:get_content_by_socket(), get_url(), get_content_url() ...
- php 实现信息采集(网页内容抓取)程序代码
php 实现信息采集(网页内容抓取)程序代码 <? //采集首页地址 $url="http://www.xz-src.com/"; //获取页面代码 $rs=file_get ...
最新文章
- 组合特征(五)countvector(w)+doc(w)+hash(w)
- C#.NET禁止一个程序启动多个实例
- 领先微软技术咨询公司招聘技术人员
- 蓝桥杯java第七届决赛第一题--愤怒小鸟
- grid++中打印表格时怎么让每页有打印表头_1分钟!学会快速打印标题行,轻松搞定不加班...
- 数据结构栈的知识_数据知识栈
- 文博项目-终端网口测试-软件
- 【编译原理笔记16】代码优化:流图,常用代码优化方法, 基本块的优化
- python select网络编程详细介绍
- gitlab update error
- 绘图技术采用计算机什么软件,计算机绘图好用的软件
- (七)练习:美萍酒店管理系统中系统设置的房间管理选项卡部分测试
- Undefined symbols for architecture x86_64:xxxxxx, referenced from:
- ftp服务器文件访问路径,ftp服务器访问路径格式
- 给所有大龄测试员写的一份信
- 硬盘柱面损坏怎么办_硬盘在坏道检测中出现了要多少个损坏柱面才说明这个硬盘废了?...
- 垃圾分类小程序,识别和站点查询,答题,用户后台管理集一体的小程序
- linux下mysql5.6版本初始化数据库密码
- 开源自主导航小车MickX4(一)ROS底盘硬件
- 安装ros系统出现 404 Not Found [IP: 91.189.91.38 80]