投稿    登录
  《Python3网络爬虫开发实战》赠书活动正在进行中!详情请戳赠书活动!欢迎参与!非常感谢!

小白爬虫第一弹之抓取妹子图

Python 哎哟卧槽 187917浏览 238评论

2017年8月30日:mzitu.com 更新了防盗链导致下载图片全部失效,已更新处理办法:

scrapy 版本也已更新

 

2017年4月24日:用scrapy重写了一个mzitu的全站爬虫:

小白进阶之Scrapy第四篇(图片下载管道篇)

 

2017年3月31号 更新   http://www.mzitu.com/all 这个地址已经被站长屏蔽了。下面的代码没法使了哦!仅提供学习方法。

 

PS:更改了一个新手比较难理解的坑(切换目录的问题),大陆之外的小伙伴儿 需要翻墙,mzitu.com对大陆之外好像不可访问。倒数第四个代码块儿是 没有函数的脚本写法,看函数有困难的小伙伴儿,可以先看看这个。

 

这是一篇完全给新手写的爬虫教程、也是我第一次写博文···也不知道怎么写(我也是个菜鸟啊!各路大神拍砖轻点儿啊!)QQ图片20161021223818由于经常在群里装逼加上群主懒啊(你看有多久没更新文章就知道了),让我来一篇爬虫的教程。QQ图片20161021224219如此装逼机会怎么能错过,今天我来给大家来一篇基础爬虫教程。

你要问目标是啥? 要知道XX才是学习最大的动力啊!所以目标就是   mzitu.com , QQ图片20161021224731(废话真多还不开始) , 下面请各位跟我的教程一步一步走,喂!!说的就是你啊!别看着了,照着教程做啊!9555112

1、基础环境部分:

工欲其事必先利器,要想把心爱的妹子搬进你的给她准备的房子,总得有几把斧子才行啊!下面这就是几把斧子!

1.1:Python基础运行环境:本篇教程采用Python3 来写,所以你需要给你的电脑装上Python3才行,我就说说Windows的环境(会玩Linux的各位应该不需要我多此一举了)。

anaconda   (点我下载)(这是一个Python的科学计算发行版本,作者打包好多好多的包,  QQ图片20161021230903不知道干啥的没关系,你只需要知道拥有它之后,那些Windows下pip安装包报错的问题将不复存在)

下载不顺利的同学我已经传到百度云了:http://pan.baidu.com/s/1boAYaTL

1.2:Requests    urllib的升级版本打包了全部功能并简化了使用方法(点我查看官方文档

1.3: beautifulsoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.(点我查看官方文档)(QQ图片20161022193315作为一个菜鸟就别去装逼用 正则表达式了,匹配不到想要的内容,容易打击积极性。老老实实的用beautifulsoup 吧!虽然性能差了点、但是你会爱上它的。)

1.4:LXML  一个HTML解析包 用于辅助beautifulsoup解析网页(如果你不用anaconda,你会发现这个包在Windows下pip安装报错,QQ图片20161021230903用了就不会啦。)。

上面的模块需要 单独安装,下面几个就不用啦。

1.5: OS 系统内置模块

下面是IDE 你喜欢用什么就用什么啦!

1.6: PyCharm  一个草鸡好用的PythonIDE工具 、真滴!草鸡好用··(我是下载地址)试用三十天 足够完成这个小爬虫啦。(如果你电脑已经存在Python环境 又需要使用anaconda的话,请按照下面的图设置一下哦!)

QQ图片20161022200505

好啦、下面开始安装需要的模块。

因为我安装的是anaconda这个科学计算的发行版,安装方式是酱紫滴:conda install 包名(当然 pip install 包名也是可以的哦!)

QQ图片20161022200031

大概界面就是上面的样子了。其余类似安装即可,好啦 下面开始正题了

首先我们打开PyCharm 新建一个Python文件,写入以下代码(喂喂!不要复制哦  自己敲一遍 印象更佳啦。)

好啦!准备工作完了、 我们来开始让妹子到碗里来吧ヽ(●-`Д´-)ノ  一个简单爬虫的诞生大慨需要下面几个步骤。(我知道图很简陋、请务必不要吐槽)

QQ20161029-1

  • 爬虫入口:顾名思义我需要程序从什么地方开始获取网页
  • 存储数据:如果获取的网页有你需要的内容则取出数据保存
  • 找到资料所在的地址:如果你你获取到的网页没有你需要的数据、但是有前往该数据页面的地址URL、则获取这个地址URL,再获取该URL的页面内容(也就等于当作爬虫入口了)

好啦!图很简陋、将就着看看,现在来开始看看网页找一个爬虫入口(开始爬取的页面)

QQ截图20161023150410

良心站长啊!居然有一个页面有整站所有的数据地址是http://www.mzitu.com/all 我们就以这个页面开始爬取(PS:真良心站长)

下面是我们的第一段代码:用作获取http://www.mzitu.com/all这个页面。

PS: 如果对requests.get(all_url, headers=headers)感到不解的各位,请务必去再看一遍官方文档哦(解释得很清楚呢)

你在你的IDE中运行的时候会打印出下面的内容:

QQ截图20161024203912

第一段部分完成啦!!是不感觉超简单!!!!看懂没?没看懂继续瞅瞅、对于看懂的各位小哥儿(妹儿)我只想说···  小哥儿(妹儿)!你老牛逼了!!

没看懂?报错?没关系!看见屏幕右边那个群号没?加它!热心的群友会为你耐心解答滴············

好啦!第一部分获取网页的部分完成啦!我们来开始第二部分提取我们想要的内容吧!!

在Chrome中打开我们第一部分请求的网址:http://www.mzitu.com/all  、 按下F12 调出Chrome的开发者调试工具(不熟练的同学一定要去了解一下哦!爬虫中绝大部分工作要靠这个来完成呢!是必备技能哦!)

是这样:

QQ截图20161024205256

看见图中那句话没?没看见?仔细看看那可是我们必须要使用的工具哦!!好啦下面我们看看使用方法

QQ图片20161025222942

好啦、我们就是通过这种方法来找到我们需要的数据在那一个标签里面的、方便后面提取出来啦!(实例很简陋 看不懂的童鞋百度一下啦!教程很多的)

你会发现这个页面并没有我们需要的图片地址啊!没有那么怎么办呢?上面那张超级简陋的流程图看了嘛?没看?赶快去瞅瞅··  你就知道我们该干啥啦!

嗯,我们需要找到图片地址所在的页面!

QQ截图20161025224053

观察一下网页你会发现图片页面的地址全部都在<li>…</li>标签中、(讲真!这么良心,还这么有规律的网页不多了啊!)不信啊?你展开<li>标签瞅瞅就知道啦

QQ截图20161025224601

点开<li>标签你会发现图片页面的地址在<a>标签的href属性中、主题在<a>标签中(搞不清楚的这两个的区别的同学、去了解一下html的基础啦!)

实现逻辑就是:先找到页面中的全部 <li>标签、然后提取出中间<a>标签的href属性值与<a>标签的类容,前者我们用来继续请求html看看会不会有我们需要的图片下载地址,后者我们存储的时候给文件夹命名使用。

可能有小哥儿(妹儿)会问,为什么不直接查找<a>标签?

你观察一下网页就知道呐!还有其他地方使用了<a>标签,如果直接查找<a>标签就会多出很多我们不需要的东西,也不方便我们提取想要的东西,先查找<li>标签就是限制一下<a>标签的范围啦!

通过上面的方法、知道了需要的数据的位置!该我们的beautifulsoup来大展身手啦!!!加上上面的一段代码现在应该是这样的啦!看不懂?没关系 看注释 看注释。

运行一下试试!

QQ截图20161028113340

诶!!!不对啊!!抓到了我们不需要的东西啊!!!这可怎么办啊!!

别急 别急!我们再去看看网页的 F12瞅瞅。

QQ截图20161028113957

找到啦!原来有其他地方有<li>标签、观察不仔细啦!现在我们怎么办?

我们再去F12瞅瞅!

QQ截图20161028114348

哈哈!这就简单了,我们推翻上面的思路  现在我们先找到 <div class=”all”>这个标签 , 然后直接找<a>标签!

诶!不对啊!怎么直接找<a>标签了!上面的<li>标签呢!!

你仔细瞅瞅网页!在<div class=”all”></div> 这个模块里面的<a>标签的全是我们需要的东西,就不需要<li>标签来限制提取范围啦!所以就直接扔掉了不用了。也方便写代码啊。

现在我们改改上面的代码!

PS:  ‘find’ 只查找给定的标签一次,就算后面还有一样的标签也不会提取出来哦! 而  ‘find_all’ 是在页面中找出所有给定的标签!有十个给定的标签就返回十个(返回的是个list哦!!),想要了解得更详细,就是看看官方文档吧!

来看看运行结果!

QQ截图20161028150438

哇哦!!全是我们需要的类容诶!什么?你的和这个不一样?或者报错了?回头看看 你做的和我有什么不一样······ 实在不行,群里求助吧!

好啦!现在我们该来提取我们想要的内容了!又该我们BeautifulSoup大展身手了。

我们需要提取出<a>标签的href属性和文本。怎么做呢?看代码!

就多了两行!很方便吧!!为什么这么写?自己去看官方文档啦!(我要全解释了,估计有些小哥儿官方文档都不会去看。这样很不好诶。)

来来!看看结果怎么样 我们来打印一下看看!

QQ截图20161028152315

哈哈 果然是我们想要的内容!我们已经找向目标前进了一半了!好啦前面已经把怎么实现的方法讲清楚了哦(如果你觉得什么地方有问题或者不清楚,在群里说说 我好改改)下面就要开始加快节奏了!!(篇幅长了 会被人骂的!)

上面我们找到了 图片的标题(暂时不管,这是后面用来创建文件夹的)和 图片页面的地址(这是我们这一步需要做的),需要做什么请参考最上面那个超简陋的流程图。

先查看一下图片页面有什么东西

你会发现一个页面只有一张图片啊!想要下载一套啊!

你点一下面的 1 、2、3、4········ 你会发现地址栏里面的URL在变化啊!这就是我们的入手的地方了!

QQ截图20161028164035

页码在<span>标签中,我们只需要获取最后一个页面的页码, 从 1 开始历遍,和我们上面获取的URL拼接在一起就是每张图片的页面地址啦!

在页面的源代码搜一下<span>标签

QQ截图20161028191747

可以发现最后一个页面的<span>标签是第二十一个标签,因为在html中标签是成对的,所以我需要查找的是第十一个<span>标签(BeautifulSoup是以开始的标签定位,而不是结尾的。开始的标签是这样<>;结束的标签是这样</>)

废话不多说上代码!

PS:下面的代码我已经把注释掉的删掉了,所以看起来和上面的不太一样。

好啦!运行一下试试!就是下面这样:

QQ截图20161028194230

完美!!每个页面的地址都出来啦!!!

下面开始找图片的实际地址啦!

随意打开上面的地址地用F12调试工具试试!

QQ截图20161028195338

会发现我们需要的地址在<div class=”main-image”>中的<img>标签的src属性中。是不是很眼熟啊!知道怎么写了吧?下面上代码:

运行一下

QQ截图20161028200330

完美!就是我们想要的东西,下面开始保存了哦!哈哈!妹子马上就可以到你碗里去了!

首先我们要给每套图建一个文件夹,然后将下载的图片以URL的 xxxxx.jpg 中的xxxxx命名保存在这个文件夹里面。直接上代码了!

好了!!来运行一下

QQ截图20161028205004

哈哈哈完美!!!以上完毕!下面我们来整理一下代码,弄个函数什么的提示下逼格!加点提示什么的

首先我们上面requests一共使用了三次,我们写一个函数复用 (别怕!一点都不难)

当调用request的时候会获取URL地址的网页然后返回获取到的response (response 是啥? 你理解成请求网页地址返回的源码就好了! 注意:如果请求的是多媒体文件的话  response返回的是二进制文件哦!)

哈哈!第一个就写好啦,简单吧!

第二个是创建文件

调用mkdir这个函数时,会在D:\mzitu文件下创建一个path这个参数的文件夹(是参数 不是 path哦!就是你调用的时候传递什么参数给这个函数 就创建什么文件夹!这个函数可以存着,下载东西到本地 都可以用),另外一个好处就是在文件夹已经存在的情况下不会报错退出程序哦!  不使用就会诶!

好啦 剩下的我就一股脑的写出来了!

PS: 感谢Lucibriel的提醒!(因为我的程序就在D盘,所以疏忽了 程序没在D盘  os.chdir()  不能切换目录的问题、已经就改过来了;非常抱歉。)

 

QQ截图20161028215007

完美!!好啦!结束了!

如果大家觉得还能看懂、还行的话 我后面在写点儿其他的。

给大家看看我的成果

QQ截图20161028220006

最后感谢mzitu.com 的站长。

 

后续几篇:

小白爬虫第二弹之健壮的小爬虫

小白爬虫第三弹之去重去重

小白爬虫第四弹之爬虫快跑(多进程+多线程)

小白进阶之Scrapy第一篇

小白进阶之Scrapy第二篇(登录篇)

Scrapy分布式的前篇–让redis和MongoDB安全点

小白进阶之Scrapy第三篇基于Scrapy-Redis的分布式以及cookies池

转载请注明:静觅 » 小白爬虫第一弹之抓取妹子图

喜欢 (1346)or分享 (0)

想学更多爬虫知识?《Python3网络爬虫开发实战》这本书也许更适合你~

了解详情or立即购买

我的个人微信公众号

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(238)个小伙伴在吐槽
  1. It really is actually a nice handy piece of facts. Now i am happy for you to contributed this useful info here. Please remain united states well informed such as this. We appreciate you expressing jusuf kalla.
    jusuf kalla2018-09-24 20:58 (27分钟前)回复
  2. My computer with itunes crashed, just installed itunes on new computer. How to keep ipod from syncing to it?
    kissa sins veronica rodriguez2018-09-24 15:23 (6小时前)回复
  3. The method and software that I use now to compile the list has changed. I hope to build a better list as I learn how. Read all about it in my latest blog post. Have a great day everyone!
    Free auto approve list 9-23-20182018-09-24 02:47 (19小时前)回复
  4. How can I insert a tag cloud into my blog @ blogspot?
    jonny and kissa sins2018-09-24 01:25 (20小时前)回复
  5. Great delivery. Outstanding arguments. Keep up the great work.
    minecraft2018-09-23 20:31 (1天前)回复
  6. I’m compiling my latest list. I’m sorry there hasn’t been any recent updates. I’ve had some problems building the list along the way. I’ll talk more about that at a later date.
    Auto approve list2018-09-21 09:39 (3天前)回复
  7. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates. I've been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this. Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.
    minecraft2018-09-20 22:12 (4天前)回复
  8. max_span = html_Soup.find('div', class_='pagenavi').find_all('span')[-2].get_text()这行会报错,有大佬知道怎么改吗
    sph1162018-09-19 17:22 (5天前)回复
  9. Sites of interest we have a link to.
    Google2018-09-18 22:49 (6天前)回复
  10. May I simply say what a comfort to discover a person that actually understands what they're discussing on the internet. You definitely realize how to bring a problem to light and make it important. A lot more people must read this and understand this side of the story. It's surprising you're not more popular since you most certainly have the gift.
    minecraft2018-09-18 03:58 (7天前)回复
  11. We like to honor numerous other world wide web sites around the internet, even when they arent linked to us, by linking to them. Beneath are some webpages worth checking out.
    Google2018-09-16 18:04 回复
  12. I am genuinely grateful to the owner of this web site who has shared this impressive piece of writing at at this time.
    minecraft2018-09-16 15:34 回复
  13. Always a major fan of linking to bloggers that I adore but dont get lots of link adore from.
    Google2018-09-16 00:42 回复
1 9 10 11