python简易_Python简易爬虫
Python小爬虫——贴吧图片的爬取
在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写。
目标:
首先肯定要实现图片抓取这个基本功能
然后实现对用户所给的链接进行抓取
最后要有一定的交互,程序不能太傻吧
一、页面获取
要让python可以进行对网页的访问,那肯定要用到urllib之类的包。So先来个 import urllib
urllib中有 urllib.urlopen(str) 方法用于打开网页并返回一个对象,调用这个对象的read()方法后能直接获得网页的源代码,内容与浏览器右键查看源码的内容一样。
1 #coding:utf-8
2 import urllib
3
4 page = urllib.urlopen('http://tieba.baidu.com/p/1753935195')#打开网页
5 htmlcode = page.read()#读取页面源码
6 print htmlcode#在控制台输出
运行结果与查看源码其实差不多
运行结果就不放上来了
也可以写到文本文档中:
1 #coding:utf-8
2 import urllib
3
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
的目录下
好了别闹,我们把它封装成方法:
1 def get_html(url):
2 page = urllib.urlopen(url)
3 html = page.read()
4 return html
然后我们的页面获取代码就K.O.了
二、图片(目标)的提取
做完上面步骤,你打开txt一看,我去!这都是什么跟什么啊,根本找不到图片在哪好伐?
客官别急啊,我这就去给你叫我们的小。。。图片!图片!
首先我们要一个正则表达式 (什么你不会?请看菜鸟入门教程-->
然后我们看源代码,Yeah 我们找到了其中一张图片是这样的
写出图片的正则表达式: reg = r'src="(.+?\.jpg)" width'
解释下吧——匹配以src="开头然后接一个或多个任意字符(非贪婪),以.jpg" width结尾的字符串。比如图中红框内src后 双引号里的链接就是一个匹配的字符串。
接着我们要做的就是从get_html方法返回的辣么长一串字符串中 拿到 满足正则表达式的 字符串。
用到python中的re库中的 re.findall(str) 它返回一个满足匹配的字符串组成的列表
1 # coding:utf-8
2 import urllib
3 import re
4
5 def get_html(url):
6 page = urllib.urlopen(url)
7 html = page.read()
8 return html
9
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 in imglist:
14 print img
打印出这么多图片链接
光把链接拿出来没用啊,我们的目标是下载下来~
urllib库中有一个 urllib.urlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容,我们来试用一下
在上面代码循环中加上 urllib.urlretrieve(img, 'tieba.jpg')
卧槽!!!怎么只下了一张
至少它下载了不是?啪啪啪啪啪(掌声)
检查下问题出在哪。。。。
没错我们只给了一个tieba.jpg的名字,后来的把前面的覆盖了。
调整下代码:
1 # coding:utf-8
2 import urllib
3 import re
4
5 def get_html(url):
6 page = urllib.urlopen(url)
7 html = page.read()
8 return html
9
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 = 0
14 for img in imglist:
15 urllib.urlretrieve(img, '%s.jpg' %x)
16 x += 1
啪啪啪啪啪
第一步完成~
三、指定链接抓取
我想要抓另一个帖子,总不能打开源代码,然后把那段地址改了在运行吧。
只是一个小程序,那也不行欸,加一个让用户指定地址的交互。
先把提取图片的那段代码打包下:
1 def get_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 = 0
6 for img in img_list:
7 urllib.urlretrieve(img, '%s.jpg' % x)
8 x += 1
最后来个请输入:
1 print u'请输入url:',
2 url = raw_input()
3 if url:
4 pass
5 else:
6 url = 'http://tieba.baidu.com/p/1753935195'
7 html_code = get_html(url)
8 get_image(html_code)
运行一下,试试另一个帖子:
完美~~
四、交互的添加
虽然写的是一个简单的小程序,但有强迫症的我还是给他加上了交互(不然多难受啊:双击,屏幕一闪,下载完了。。。)
最后的代码
1 # coding:utf-8
2 import urllib
3 import re
4
5 def get_html(url):
6 page = urllib.urlopen(url)
7 html_code = page.read()
8 return html_code
9
10 def get_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 = 0
15 for img in img_list:
16 urllib.urlretrieve(img, '%s.jpg' % x)
17 x += 1
18
19 print u'-------网页图片抓取-------'
20 print u'请输入url:',
21 url = raw_input()
22 if url:
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')
相对来说比较舒服的交互体验,大功告成~
参考链接:https://www.cnblogs.com/Axi8/p/5757270.html
python简易_Python简易爬虫相关推荐
- python挖矿_python简易版挖矿小游戏
大家好,今天我们来说一说怎么制作一个简易版的挖矿小游戏. 先写初始设置的代码:import pygame, sys, random, time pygame.init() screen = pygam ...
- 爬虫就是python吗_python就是爬虫吗
很多初学者都有这样的疑问:python就是爬虫吗?爬虫有什么干什么的?下面来说一说什么是python和爬虫. python Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设 ...
- 优品课堂python下载_Python 网络爬虫数据采集 【优品课堂】
资源内容: Python 网络爬虫数据采集 [优品课堂]|____9 requests HTTP编程 |____5 [录播]requests cookies 处理 ...
- 优品课堂python下载_Python网络爬虫数据采集【优品课堂】
资源内容: Python网络爬虫数据采集[优品课堂]|____1.mp4|____1.mp4|____1.mp4|____1.mp4|____1Python标准库urllib应用I|____1URL解 ...
- 爬虫软件python功能_Python 网络爬虫程序详解
#!/usr/bin/python #调用python from sys import argv #导入sys是导入python解释器和他环境相关的参数 from os import makedirs ...
- 简单的python画图代码_python opencv如何实现简易画图板 python opencv实现简易画图板代码...
python opencv如何实现简易画图板?本篇文章小编给大家分享一下python opencv实现简易画图板代码,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 代码如下 ...
- python制作图形化小游戏_创意编程|Python的GUI简易界面设计测测你的反应力
Python的GUI简易界面设计案例 测测你的反应力 作为初次接触代码编程的你,是不是觉得Python程序除了"码"就是"字"即使是有趣的程序除了烧烧 ...
- python爬虫语言都能干什么_python除了爬虫还可以做什么
第86页-Python教程_Python图文教程-php中文网 https://www.php.cn/python-tutorials.html?p=86vPython是一种计算机程序设计语言.是一 ...
- [转载] python实现一个简易的计算器
参考链接: 使用Python创建一个简单的计算器 python实现一个简易的计算器 from tkinter import from tkinter.ttk import * def my_frame ...
最新文章
- 2d的公式_钢筋下料计算公式分享,助你提高施工效率!
- 外包网络推广公司浅析网站如何通过修改网站标题来提升排名?
- Spring松耦合的实现
- WinForm编程数据视图之DataGridView浅析
- C#验证 中国 身份证 代码
- 【git】强制覆盖本地代码(与git远程仓库保持一致)
- Mac 解决 command not found: mysql
- shell echo 彩色字体
- 百度谷歌2013年母亲节 赏析中文搜索引擎庆祝涂鸦
- 权御天下计算机音乐数字乐谱,权御天下(单音 适合电吉他)
- 自己动手修改VB.NET支付宝接口
- 拓端tecdat|python缺失值处理案例分析:泰坦尼克数据
- 从马克思看计算机科学,从马克思主义的角度,用科学精神来看生死观,应该说已经解决,或...
- js html实体编码转换,字符串js编码转换成实体html编码的方法(防范XSS攻击)
- linux终端设置为管理员权限,ubuntu 中的管理员权限
- Android之自定义一个可播放某一时间段的音乐播放器
- Android开发人员不得不收集的代码(不断更新)
- 程序员健康指南阅读笔记
- Unity3D 光照系统(一)
- 软件需求规格说明书--文档模板
热门文章
- Swift泛型Protocol对比C#泛型Interface
- 【原创】oracle的tpc-c测试及方法
- HDU 1492 The number of divisors(约数) about Humble Numbers
- 诚邀参加微软.NET俱乐部10月24日Windows 7社区发布会
- 几个ubuntu16.04镜像下载地址
- gdb调试时,Program received signal SIGPIPE, Broken pipe.
- 【干货】同步与互斥的失败例子
- 这不是商业互吹,是学习的宝藏
- 度量时间差和jiffies计数器
- 一个java类运行时从哪个方法开始_Java的应用程序是从类中的