简单实现python爬虫功能


Posted in Python onDecember 31, 2015

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

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

我们可以通过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 相关文章推荐
python list转dict示例分享
Jan 28 Python
python提示No module named images的解决方法
Sep 29 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
PyQt5 pyqt多线程操作入门
May 05 Python
python保存数据到本地文件的方法
Jun 23 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Python中常用的高阶函数实例详解
Feb 21 Python
解决numpy和torch数据类型转化的问题
May 23 Python
Pandas数据类型之category的用法
Jun 28 Python
python实现颜色空间转换程序(Tkinter)
Dec 31 #Python
基于python的Tkinter实现一个简易计算器
Dec 31 #Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 #Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 #Python
python实现爬虫统计学校BBS男女比例(一)
Dec 31 #Python
Python 功能和特点(新手必学)
Dec 30 #Python
python实现文本文件合并
Dec 29 #Python
You might like
使用php来实现网络服务
2009/09/15 PHP
php的字符串用法小结
2010/06/08 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
Javascript之文件操作
2007/03/07 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
JS定时器实例
2013/04/17 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
python写入中英文字符串到文件的方法
2015/05/06 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python2.7实现邮件发送功能
2018/12/12 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
中职生自荐信范文
2014/06/15 职场文书
2016公司年会通知范文
2015/04/25 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers