第一个python爬虫_Python爬虫01——第一个小爬虫

Python小爬虫——贴吧图片的爬取

在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写。

目标:

首先肯定要实现图片抓取这个基本功能

然后实现对用户所给的链接进行抓取

最后要有一定的交互,程序不能太傻吧

一、页面获取

要让python可以进行对网页的访问,那肯定要用到urllib之类的包。So先来个 import urllib

urllib中有 urllib.urlopen(str) 方法用于打开网页并返回一个对象,调用这个对象的read()方法后能直接获得网页的源代码,内容与浏览器右键查看源码的内容一样。

1 #coding:utf-8

2 importurllib3

4 page = urllib.urlopen('http://tieba.baidu.com/p/1753935195')#打开网页

5 htmlcode = page.read()#读取页面源码

6 print htmlcode#在控制台输出

运行结果与查看源码其实差不多

运行结果就不放上来了

也可以写到文本文档中:

1 #coding:utf-8

2 importurllib3

4 page = urllib.urlopen('http://tieba.baidu.com/p/1753935195')5 htmlcode =page.read()6 #print htmlcode

7

8 pageFile = open('pageCode.txt','w')#以写的方式打开pageCode.txt

9 pageFile.write(htmlcode)#写入

10 pageFile.close()#开了记得关

运行一遍,txt就出现在了getJpg.py

1006376-20160810160113481-775871590.jpg的目录下

好了别闹,我们把它封装成方法:

1 defget_html(url):2 page =urllib.urlopen(url)3 html =page.read()4 return html

然后我们的页面获取代码就K.O.了

二、图片(目标)的提取

做完上面步骤,你打开txt一看,我去!这都是什么跟什么啊,根本找不到图片在哪好伐?

客官别急啊,我这就去给你叫我们的小。。。图片!图片!

首先我们要一个正则表达式 (什么你不会?请看菜鸟入门教程-->

然后我们看源代码,Yeah 我们找到了其中一张图片是这样的

1006376-20160810172938809-900367175.png

写出图片的正则表达式: reg = r'src="(.+?\.jpg)" width'

解释下吧——匹配以src="开头然后接一个或多个任意字符(非贪婪),以.jpg" width结尾的字符串。比如图中红框内src后 双引号里的链接就是一个匹配的字符串。

接着我们要做的就是从get_html方法返回的辣么长一串字符串中 拿到 满足正则表达式的 字符串。

用到python中的re库中的 re.findall(str) 它返回一个满足匹配的字符串组成的列表

1 #coding:utf-8

2 importurllib3 importre4

5 defget_html(url):6 page =urllib.urlopen(url)7 html =page.read()8 returnhtml9

10 reg = r'src="(.+?\.jpg)" width'#正则表达式

11 reg_img = re.compile(reg)#编译一下,运行更快

12 imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))#进行匹配

13 for img inimglist:14 print img

打印出这么多图片链接

1006376-20160810171013934-1574238132.png

光把链接拿出来没用啊,我们的目标是下载下来~

urllib库中有一个 urllib.urlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容,我们来试用一下

在上面代码循环中加上 urllib.urlretrieve(img, 'tieba.jpg')

1006376-20160810171535652-1381674384.png

卧槽!!!怎么只下了一张

至少它下载了不是?啪啪啪啪啪(掌声)

检查下问题出在哪。。。。

没错我们只给了一个tieba.jpg的名字,后来的把前面的覆盖了。

调整下代码:

1 #coding:utf-8

2 importurllib3 importre4

5 defget_html(url):6 page =urllib.urlopen(url)7 html =page.read()8 returnhtml9

10 reg = r'src="(.+?\.jpg)" width'

11 reg_img =re.compile(reg)12 imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))13 x =014 for img inimglist:15 urllib.urlretrieve(img, '%s.jpg' %x)16 x += 1

啪啪啪啪啪

1006376-20160811151624512-587935525.png

第一步完成~

三、指定链接抓取

我想要抓另一个帖子,总不能打开源代码,然后把那段地址改了在运行吧。

只是一个小程序,那也不行欸,加一个让用户指定地址的交互。

先把提取图片的那段代码打包下:

1 defget_image(html_code):2 reg = r'src="(.+?\.jpg)" width'

3 reg_img =re.compile(reg)4 img_list =reg_img.findall(html_code)5 x =06 for img inimg_list:7 urllib.urlretrieve(img, '%s.jpg' %x)8 x += 1

最后来个请输入:

1 print u'请输入url:',2 url =raw_input()3 ifurl:4 pass

5 else:6 url = 'http://tieba.baidu.com/p/1753935195'

7 html_code =get_html(url)8 get_image(html_code)

运行一下,试试另一个帖子:

1006376-20160811152749527-237551159.png

1006376-20160811152806090-957015599.png

完美~~

四、交互的添加

虽然写的是一个简单的小程序,但有强迫症的我还是给他加上了交互(不然多难受啊:双击,屏幕一闪,下载完了。。。)

最后的代码

1 #coding:utf-8

2 importurllib3 importre4

5 defget_html(url):6 page =urllib.urlopen(url)7 html_code =page.read()8 returnhtml_code9

10 defget_image(html_code):11 reg = r'src="(.+?\.jpg)" width'

12 reg_img =re.compile(reg)13 img_list =reg_img.findall(html_code)14 x =015 for img inimg_list:16 urllib.urlretrieve(img, '%s.jpg' %x)17 x += 1

18

19 print u'-------网页图片抓取-------'

20 print u'请输入url:',21 url =raw_input()22 ifurl:23 pass

24 else:25 print u'---没有地址输入正在使用默认地址---'

26 url = 'http://tieba.baidu.com/p/1753935195'

27 print u'----------正在获取网页---------'

28 html_code =get_html(url)29 print u'----------正在下载图片---------'

30 get_image(html_code)31 print u'-----------下载成功-----------'

32 raw_input('Press Enter to exit')

相对来说比较舒服的交互体验,大功告成~

1006376-20160811153551606-565192323.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac下,如何把项目托管到Github上(Github Desktop的使用)

在上一篇中,详细讲解了使用X-code和终端配合上传代码的方法,这种方法比较传统,中间会有坑,英文看起来也费劲,不过Github官方提供了一个Mac版的客户端,如下图: 附上下载链接:传送门 下…

大数据实验报告总结体会_建设大数据中台架构思考与总结

简介本文介绍完善的大数据中台架构了解这些架构里每个部分的位置,功能和含义及背后原理及应用场景。帮助技术与产品经理对大数据技术体系有个全面的了解。数据中台定义:集成离线数仓与实时数仓,并以多数据源统一整合采集到kafka,再通过kafka进…

半数集问题

给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下: (1) n ∈set(n); (2) 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半; (3) 按此规则进行处理,直到不能再添加自然数为止。…

maven的profile详解

详细内容请见:https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有…

夏至未至计算机版音乐,夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总...

夏至未至有哪些插曲背景音乐 夏至未至所有bgm歌曲汇总夏至未至第一集插曲是什么?夏至未至插曲曝光。夏至未至是由陈学冬、郑爽、白敬亭等联袂主演的青春偶像剧,昨晚已经开播了,那么第一集的插曲是什么呢?和小编一起去看看吧!夏至未至第一集插曲《那些花儿》那片笑…

nmap常用参数详解

nmap常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 借用英雄联盟的一个英雄赵信的一句话:“即使敌众我寡,末将亦能万军丛中取敌将首级!”。三国关羽,万军丛中斩了颜良&#x…

模板变量,过滤器和静态文件引用

模板变量,过滤器和静态文件引用 模板路径 Djiango先到settings里面找templates下的DIRS查看是否有路径,也是从上往下依次寻找,找到就返回。如果DIRS没有,就到APP_DIRS里面寻找。但是APP要先在INSTALLED_APPS里面进行注册然后根据I…

antd option宽度自适应_WordPress文章中添加自适应宽度的表格——墨涩网

WordPress文章中添加自适应表格,前面写文章的时候需要用到表格来表达阵列信息,但是在WordPress添加表格不想是在office中那样方便,需要借助插件或者代码才可以实现,今天分享一个不需要安装插件纯代码实现WordPress文章中添加自适应…

OO第一单元总结

OO第一单元总结 第一次作业总结 这是我第一次接触Java和面向对象思想,最一开始,我建立了简单的类和对象的概念,多亏了第一次作业难度和复杂度较低,我才没有崩掉hhh。 第一次作业我只分了三个类,一个main,一…

接口开发指的是什么_企业在什么情况下要选择定制开发软件

软件定制开发是指软件开发商依据我们的需求停止量身定制的开发,软件定制开发相关于单纯产品的施行周期长、本钱高、风险大。假如根据定制开发的工作量或水平来分,我们能够分为完整定制开发和局部定制开发,完整定制开发是指软件开发公司依据我…

计算机没有搜索筛选功能,EXCEL中筛选工具怎么没有搜索功能

EXCEL中筛选工具怎么没有搜索功能卡饭网本站整理2018-04-01excel是一款数据处理工具,可以在众多的数据中找到想要的经过处理之后的数据,而最直接方便的功能就是筛选。请阅读下文,了解如何对数据进行筛选。如下图所示的学生成绩中,…

51nod 1851 俄罗斯方块(思维题)

分析&#xff1a;假设n>m&#xff0c;m为1,2单独讨论下&#xff0c;否则可以用第二行第一个把所有黑块搞到2x2的格子里&#xff0c;不断用凸出来的那个角一列一列把黑的变白就行了。然后只要黑色有偶数块都可以构造出来。复杂度O(nm) #include <iostream> #include &l…

gprof, Valgrind and gperftools - an evaluation of some tools for application level CPU profiling on

2019独角兽企业重金招聘Python工程师标准>>> In this post I give an overview of my evaluation of three different CPU profiling tools: gperftools, Valgrind and gprof. I evaluated the three tools on usage, functionality, accuracy and runtime overhead…

xp计算机属性打不开,xp系统我的电脑右键属性打不开怎么办

在使用xp系统过程中,我们经常需要打开“我的电脑”右键属性,查看系统信息以及进行虚拟内存、性能方面的设置,不过有深度技术ghost xp sp3纯净版用户右键点击我的电脑,发现右键菜单中的“属性”打不开,出现这个问题通常是注册表禁用了这个属性,下面小编跟大家介绍xp系统我的电脑…

状态机学习(二)解析INI文件

题目来自<系统程序员成长计划> 作者:李先静. 状态变化如下 #include <string> #include <iostream> using namespace std;string s "[GRP]\n\ name def \n\ data 2016.11.29 \r\n\ ; this is a comment \r\n\ str this is a test \n\ [zhangshan]…

接口之用例编写、验证

一、用Excel编写用例&#xff08;xlsx格式&#xff09; 截图仅供参考&#xff0c;实际用例编写需要根据实际情况来。 二、用例加载、验证 1、数据的加载 import xlrd,xlwt #python操作excel主要用到xlrd和xlwt这两个库&#xff0c;即xlrd是读excel&#xff0c;xlwt是写excel的库…

repcached配置与简单測试

安装libevent-devel进行configure。安装在文件夹/usr/local/repcached下编译安装完毕启动11211节点启动11212节点编写文件验证复制&#xff08;分别向1、2节点存入数据&#xff0c;验证复制&#xff09;ruby执行结果

元祖(转载)

一.基本数据类型  整数&#xff1a;int  字符串&#xff1a;str(注&#xff1a;\t等于一个tab键)  布尔值&#xff1a; bool  列表&#xff1a;list   列表用[]  元祖&#xff1a;tuple  元祖用&#xff08;&#xff09;  字典&#xff1a;dict注&#xff1a;所…

leetcood学习笔记-226- 翻转二叉树

题目描述&#xff1a; 第一次提交&#xff1a; class Solution(object):def invertTree(self, root):""":type root: TreeNode:rtype: TreeNode"""if not root:return Nonetemp root.leftroot.left root.rightroot.right temp# root.left,…

惠普omen测试软件,双GTX1080奢华魔方PC 惠普OMEN X评测

惠普最近一段时间在游戏PC领域着力发力&#xff0c;桌面的暗影精灵家族热卖&#xff0c;如火如荼的势头终于传导到了台式机领域。而今&#xff0c;惠普也终于有了自己正统意义上的重型武器——桌面游戏台式机OMEN 900暗影精灵II 系列。今天我们就要为大家评测这款三万元的台式机…