Python爬虫01——第一个小爬虫
原文:https://www.cnblogs.com/Axi8/p/5757270.html
Python小爬虫——贴吧图片的爬取
在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写。
目标:
- 首先肯定要实现图片抓取这个基本功能
- 然后实现对用户所给的链接进行抓取
- 最后要有一定的交互,程序不能太傻吧
一、页面获取
要让python可以进行对网页的访问,那肯定要用到urllib之类的包。So先来个 import urllib
urllib中有 urllib.urlopen(str) 方法用于打开网页并返回一个对象,调用这个对象的read()方法后能直接获得网页的源代码,内容与浏览器右键查看源码的内容一样。
#coding:utf-8
import urllibpage = urllib.urlopen('http://tieba.baidu.com/p/1753935195')#打开网页
htmlcode = page.read()#读取页面源码
print htmlcode#在控制台输出
运行结果与查看源码其实差不多
运行结果就不放上来了
也可以写到文本文档中:
#coding:utf-8
import urllibpage = urllib.urlopen('http://tieba.baidu.com/p/1753935195')
htmlcode = page.read()
#print htmlcodepageFile = open('pageCode.txt','w')#以写的方式打开pageCode.txt
pageFile.write(htmlcode)#写入
pageFile.close()#开了记得关
运行一遍,txt就出现在了getJpg.py的目录下
好了别闹,我们把它封装成方法:
def get_html(url):page = urllib.urlopen(url)html = page.read()return html
然后我们的页面获取代码就K.O.了
二、图片(目标)的提取
做完上面步骤,你打开txt一看,我去!这都是什么跟什么啊,根本找不到图片在哪好伐?
客官别急啊,我这就去给你叫我们的小。。。图片!图片!
首先我们要一个正则表达式 (什么你不会?请看菜鸟入门教程-->Go)
然后我们看源代码,Yeah 我们找到了其中一张图片是这样的
写出图片的正则表达式: reg = r'src="(.+?\.jpg)" width'
解释下吧——匹配以src="开头然后接一个或多个任意字符(非贪婪),以.jpg" width结尾的字符串。比如图中红框内src后 双引号里的链接就是一个匹配的字符串。
接着我们要做的就是从get_html方法返回的辣么长一串字符串中 拿到 满足正则表达式的 字符串。
用到python中的re库中的 re.findall(str) 它返回一个满足匹配的字符串组成的列表
# coding:utf-8
import urllib
import redef get_html(url):page = urllib.urlopen(url)html = page.read()return htmlreg = r'src="(.+?\.jpg)" width'#正则表达式
reg_img = re.compile(reg)#编译一下,运行更快
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))#进行匹配
for img in imglist:print img
打印出这么多图片链接
光把链接拿出来没用啊,我们的目标是下载下来~
urllib库中有一个 urllib.urlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容,我们来试用一下
在上面代码循环中加上 urllib.urlretrieve(img, 'tieba.jpg')
卧槽!!!怎么只下了一张
至少它下载了不是?啪啪啪啪啪(掌声)
检查下问题出在哪。。。。
没错我们只给了一个tieba.jpg的名字,后来的把前面的覆盖了。
调整下代码:
# coding:utf-8
import urllib
import redef get_html(url):page = urllib.urlopen(url)html = page.read()return htmlreg = r'src="(.+?\.jpg)" width'
reg_img = re.compile(reg)
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))
x = 0
for img in imglist:urllib.urlretrieve(img, '%s.jpg' %x)x += 1
啪啪啪啪啪
第一步完成~
三、指定链接抓取
我想要抓另一个帖子,总不能打开源代码,然后把那段地址改了在运行吧。
只是一个小程序,那也不行欸,加一个让用户指定地址的交互。
先把提取图片的那段代码打包下:
def get_image(html_code):reg = r'src="(.+?\.jpg)" width'reg_img = re.compile(reg)img_list = reg_img.findall(html_code)x = 0for img in img_list:urllib.urlretrieve(img, '%s.jpg' % x)x += 1
最后来个请输入:
print u'请输入url:',
url = raw_input()
if url:pass
else:url = 'http://tieba.baidu.com/p/1753935195'
html_code = get_html(url)
get_image(html_code)
运行一下,试试另一个帖子:
完美~~
四、交互的添加
虽然写的是一个简单的小程序,但有强迫症的我还是给他加上了交互(不然多难受啊:双击,屏幕一闪,下载完了。。。)
最后的代码
# coding:utf-8
import urllib
import redef get_html(url):page = urllib.urlopen(url)html_code = page.read()return html_codedef get_image(html_code):reg = r'src="(.+?\.jpg)" width'reg_img = re.compile(reg)img_list = reg_img.findall(html_code)x = 0for img in img_list:urllib.urlretrieve(img, '%s.jpg' % x)x += 1print u'-------网页图片抓取-------'
print u'请输入url:',
url = raw_input()
if url:pass
else:print u'---没有地址输入正在使用默认地址---'url = 'http://tieba.baidu.com/p/1753935195'
print u'----------正在获取网页---------'
html_code = get_html(url)
print u'----------正在下载图片---------'
get_image(html_code)
print u'-----------下载成功-----------'
raw_input('Press Enter to exit')
相对来说比较舒服的交互体验,大功告成~
Python爬虫01——第一个小爬虫相关推荐
- 第一个python爬虫_Python爬虫01——第一个小爬虫
Python小爬虫--贴吧图片的爬取 在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写. 目标: 首先肯定要实现图片抓取这个基本功能 然后实现对用户所给的链接进行抓取 最后要有一定的 ...
- python 人生的第一个小爬虫 爬小说 保存一下
# -*- coding:UTF-8 -*- from urllib import request from bs4 import BeautifulSoup import chardet impor ...
- java爬虫编写步骤_JAVA爬虫--编写第一个网络爬虫程序
JAVA爬虫–编写第一个网络爬虫程序 前言上一章节介绍了XPATH基础语法,本章节将手把手带大家编写第一个爬虫程序,同时也希望能通过这个爬虫程序,帮助大家熟悉上一章节学习的XPATH基础语法并运用到实 ...
- Python日记——柿子要捡软的捏,记第一只小爬虫
2017.12.19 阅读了<零基础入门学习Python>一书第14章"论一只爬虫的自我修养"之后总想跃跃欲试实现一只自己的小爬虫,但可惜的是,或许因为这本书的读者太多 ...
- python搞笑动态图_python小爬虫抓取搞笑图片
大部分小程序都是基于py2.7的,我于是便想直接出一个py3.4最新版本的教程.大致看一下第一篇了解一下的一些概念性的东西以及bs4第三方库的使用.请参考文末. 我们的第一个小程序的相关要求: 目标: ...
- Python爬虫学习——开始一个小爬虫(一)
Python爬虫学习 文章目录 Python爬虫学习 前言 一.什么是爬虫 爬虫的矛与盾 二.开启一个小爬虫 1.导入urlopen包 2.打开一个网址,得到响应 3.解码 4.保存到文件 5.打开 ...
- python将txt转为字符串_python做第一只小爬虫
"受尽苦难而不厌,此乃修罗之路" 本文技术含量过低,请谨慎观看 之前用R语言的Rcurl包做过爬虫,给自己的第一感觉是比较费劲,看着看着发际线就愈加亮眼,最后果断丢之.不过好的是和 ...
- Python爬虫——第一个小爬虫(经典)修改版
贴吧图片的爬取 一.页面获取 要让python可以进行对网页的访问,那肯定要用到urllib之类的包.So先来个 import urllib.request 由于Python3里的urllib模块已经 ...
- 爬虫学习实践(1)——我的第一个小爬虫
文章目录 应用流程 一个简单爬虫实例 获取 提取 储存 最近由于竞赛需要,准备自学一下爬虫,以备不时之需,参考书籍是唐松的<Python网络爬虫从入门到实践>,上面的代码也大多来源于书上, ...
最新文章
- 网页视频播放器插件源码
- 常见的服务器内存浅析
- 【计算理论】计算复杂性 ( 证明团问题是 NP 完全问题 )
- HTML5 新增内容
- 嵌入式 开发板 Linux 挂载ubifs
- 用户 NT AUTHORITY\NETWORK SERVICE 登录失败解决方法
- Matlab C++混合编程 在VisualStudio下的编程 使用了Opencv库
- bean 属性设置默认值_activiti7源码分析之引擎初始化与Bean注入
- python变量名称跟着循环,在Python中使用列表中的名称循环创建新变量
- 一图说清:做数据分析,到底要懂多少业务知识?
- UI(用户界面)设计规则和规范
- 力扣-64 最小路径和
- python_文件处理模式
- configure: error: Library requirements (libpcre >= 7.8) not met
- Android开发——使用高级的RecyclerView实现侧滑菜单删除功能(SwipeRecyclerView)
- 2000~2022年Java学习笔记
- 关键时刻救一命:旧手机改造求生工具
- 三、EXCEL复制数字到txt文件,存在空格
- ThreeJs基础代码段(五)飘扬的旗帜
- Eclipse中的 项目编码设置