python实现简单爬虫功能的示例


Posted in Python onOctober 24, 2016

在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。

我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候并没有另存为选项,还有办法就通过就是通过截图工具截取下来,但这样就降低图片的清晰度。好吧~!其实你很厉害的,右键查看页面源代码。

我们可以通过python 来实现这样一个简单的爬虫功能,把我们想要的代码爬取到本地。下面就看看如何使用python来实现这样一个功能。

一,获取整个页面数据

首先我们可以先获取要下载图片的整个页面信息。
getjpg.py

#coding=utf-8
import urllib
def getHtml(url):
  page = urllib.urlopen(url)
  html = page.read()
  return html

html = getHtml("http://tieba.baidu.com/p/2738151262")
print html

Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据。首先,我们定义了一个getHtml()函数:

urllib.urlopen()方法用于打开一个URL地址。

read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来。执行程序就会把整个网页打印输出。

二,筛选页面中想要的数据
Python 提供了非常强大的正则表达式,我们需要先要了解一点python 正则表达式的知识才行.

假如我们百度贴吧找到了几张漂亮的壁纸,通过到前段查看工具。找到了图片的地址,如:src=”http://imgsrc.baidu.com/forum......jpg”pic_ext=”jpeg”

python实现简单爬虫功能的示例

修改代码如下:

import re
import urllib

def getHtml(url):
  page = urllib.urlopen(url)
  html = page.read()
  return html

def getImg(html):
  reg = r'src="(.+?\.jpg)" pic_ext'
  imgre = re.compile(reg)
  imglist = re.findall(imgre,html)
  return imglist   
  
html = getHtml("http://tieba.baidu.com/p/2460150866")
print getImg(html)

我们又创建了getImg()函数,用于在获取的整个页面中筛选需要的图片连接。re模块主要包含了正则表达式:

re.compile() 可以把正则表达式编译成一个正则表达式对象.

re.findall() 方法读取html 中包含 imgre(正则表达式)的数据。

运行脚本将得到整个页面中包含图片的URL地址。

三,将页面筛选的数据保存到本地

把筛选的图片地址通过for循环遍历并保存到本地,代码如下:

#coding=utf-8
import urllib
import re

def getHtml(url):
  page = urllib.urlopen(url)
  html = page.read()
  return html

def getImg(html):
  reg = r'src="(.+?\.jpg)" pic_ext'
  imgre = re.compile(reg)
  imglist = re.findall(imgre,html)
  x = 0
  for imgurl in imglist:
    urllib.urlretrieve(imgurl,'%s.jpg' % x)
    x+=1


html = getHtml("http://tieba.baidu.com/p/2460150866")

print getImg(html)

这里的核心是用到了urllib.urlretrieve()方法,直接将远程数据下载到本地。

通过一个for循环对获取的图片连接进行遍历,为了使图片的文件名看上去更规范,对其进行重命名,命名规则通过x变量加1。保存的位置默认为程序的存放目录。

程序运行完成,将在目录下看到下载到本地的文件。

python实现简单爬虫功能的示例

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python关键字and和or用法实例
May 28 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
WxPython建立批量录入框窗口
Feb 27 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
Python学习之异常中的finally使用详解
Mar 16 Python
简单谈谈Python中的反转字符串问题
Oct 24 #Python
Python 内置函数complex详解
Oct 23 #Python
Python检测生僻字的实现方法
Oct 23 #Python
python 写入csv乱码问题解决方法
Oct 23 #Python
解决Python中字符串和数字拼接报错的方法
Oct 23 #Python
python 读写txt文件 json文件的实现方法
Oct 22 #Python
Python类属性的延迟计算
Oct 22 #Python
You might like
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
php 使用array函数实现分页
2015/02/13 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
Vue实现穿梭框效果
2020/09/30 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
简单解析Django框架中的表单验证
2015/07/17 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python中存取文件的4种不同操作
2018/07/02 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
python的等深分箱实例
2019/11/22 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
移动通信专业自荐信范文
2013/11/12 职场文书
管道维修工岗位职责
2013/12/27 职场文书
领导干部培训感言
2014/01/23 职场文书
文化宣传方案
2014/03/13 职场文书
工程管理英文求职信
2014/03/18 职场文书
学校志愿者活动总结
2014/06/27 职场文书
环保证明
2015/06/23 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers