首发于Star's Blog
零基础入门python爬虫(三)

零基础入门python爬虫(三)

**第三章**


**0x00 ****闲言少叙**

系列文章前两集的链接地址:

零基础入门python爬虫(一) - 知乎专栏

零基础入门python爬虫(二) - 知乎专栏

菜鸟技术交流小群:317784952


通过前两章相信原来小白的你现在已经赶上了我,原来菜鸟的你已经甩我几条街,原来大牛的你已经被我拉低了智商。第三章做一个实际的事情,等于是一次爬虫实战。我们抓取一下百度某贴吧的图片玩玩!你会说右键另存为就挺好,我这人这不懒嘛!你又说保存整个网页就好啦,那样怎么能让一个有洁癖的厨子满意呢?大大小小的图乱做一团,想要的不想要的都在,恶心坏了。那你想怎样?爬虫吧!


**0x001****百度贴吧下载图片方法一**

思路:找你想下载图片的共同特张,下载这些有特征的图片不就得了嘛!

用到正则表达式,用re这个标准模块。

先用同上两章方法得到网页内容,再限制特征。


# -*- confing:utf-8 -*-
import urllib
import re
 
def get_content(url):
"""doc."""
html = urllib.urlopen(url)
content = html.read()
html.close()
return content
def get_images(info):
"""doc.
<img class="BDE_Image"
src="http://imgsrc.baidu.com/forum/w%3D580/sign=69b173e21a950a7b75354ecc3ad3625c/4fff8c1001e939010486a5ea7cec54e737d19607.jpg" size="59454" width="421"
height="750" size="59454">
"""
regex = r'class="DBE_Image" src="(.+?\.jpg)"'
pat = re.compile(regex)
images_code = re.findall(pat, info)
i = 0
for image_url in images_code:
print image_url
urllib.urlretrieve(image_url, '%s.jpg' % i)
i += 1
print images_code
info = get_content("http://tieba.baidu.com/p/xxx")
print get_images(info)



正则表达式的编写是这一节的重点和难点,笔记在图中,请仔细看一下。



妹子的照片已经一排排码好放在文件夹里了。




**0x002****百度贴吧下载图片方法二**


接下来是爬虫神之利器的上场,它就是——美丽的心灵老鸡汤(BeautifulSoup)


官方文档地址:


[Beautiful Soup Documentation](Beautiful Soup Documentation)


安装方法和初体验:


[Python爬虫利器二之Beautiful Soup的用法](Python爬虫利器二之Beautiful Soup的用法)


[Linux和Windows环境下Beautiful Soup模块的安装](Linux和Windows环境下Beautiful Soup模块的安装)


绝对是挑讲的好的教程链接才放上来,借这个机会索性我把pip,easy_inall和1xml一通安装完了,安装方法简单介绍下,网上太多文章。


安装过程:





执行上图这一条检测,不报错说明安装成功。


然后我们编写爬虫代码:


导入from bs4 import BeautifulSoup


注意:要是BeautifulSoup的版本为3.x,则导入方式为:from BeautifulSoup import BeautifulSoup


# -*- confing:utf-8 -*-
import urllib
from bs4 import BeautifulSoup
# BeautifulSoup
def get_content(url):

"""doc."""

html = urllib.urlopen(url)
content = html.read()
html.close()
return content
def get_images(info):

"""doc.
<img class="BDE_Image"
src="http://imgsrc.baidu.com/forum/w%3D580/sign=69b173e21a950a7b75354ecc3ad3625c/4fff8c1001e939010486a5ea7cec54e737d19607.jpg" size="59454" width="421"
height="750" size="59454">
"""
soup = BeautifulSoup(info)
all_img = soup.find_all('img',class_="BDE_Image")
x = 1
for img in all_img:
print img
image_name = '%s.jpg' % x
urllib.urlretrieve(img['src'], image_name)
x += 1
print type(img)
info = get_content("http://tieba.baidu.com/p/xxx")
print get_images(info)



图解一下部分重要代码的意义:




参考文章:


[BeautifulSoup安装及其应用 - Prefecter](BeautifulSoup安装及其应用 - Prefecter)


绝对是挑好的放上来。



**0x003 ****你发现换了一个帖子**


对,你没有看错,对某一网页过度频繁访问百度会不高兴的,总不能老爬人家妹子,我们找一个“表情帝”的帖子用第二种方法爬了一下,为节省时间故意选了一个只有两张图的帖。没有用正则表达式,这样看起来更好懂,更专业一些。1xml也是爬虫利器,有兴趣的同学继续深究。




**0x004 ****本章小结**


本章我们交流到两种抓取百度贴吧图片并有序下载到本地的方法,第二种加载第三方模块BeautifulSoup值得推崇。其实如果你是0基础的话到这个时候就应该可以看懂一些博客里的教程代码它们是在做什么,这是你学习的开始,也是你学习的最佳途径,不懂什么找什么。祝大家学习进步,工作快乐。


** **


**后记:**


到今天为止呢“0基础入门python爬虫”三部曲文章就告一段落了。相信如果你是真的认真读过文章,按着各个思路操作过不管你是新手还是老手都一定会有收获的,当然老手的收获更多是看到不合理的代码和方法找到更合理的办法,这何尝不是一种收获呢?或是看到这篇烂文多了槽点,你的批评对我来说是最好的指点。


写到这里据截稿日期已经近在咫尺,其实是很忙的,为什么我愿意花大量的时间做这样的事情?除了自己不可抗拒的喜欢外更多的是感动的,一定要记住,装个逼就了事的人绝对不是高手。即使他现在比你强,总有一天你会赶超他。大家都有自己的事,为什么人家愿意收集收集好的资料每天都发出来,看一篇文章十分钟,写一篇文章多久?所以一定要协助他们挺起来。


文章一定会有后续,下次想写一个接口MD5解密网站的小公举,实现多个网站批量解密,已经有这样现成的工具,正在剖析它的原理。其实,爬虫之路才刚刚开始。


文近尾声我的心底回荡着的满是圣贤书里的一句话:合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下……




**推荐阅读:**


[Python爬虫实战(4):抓取淘宝MM照片 - Python - 伯乐在线](Python爬虫实战(4):抓取淘宝MM照片 - Python - 伯乐在线)


Home - 廖雪峰的官方网站


Python爬虫利器二之Beautiful Soup的用法


[BeautifulSoup安装及其应用 - Prefecter](BeautifulSoup安装及其应用 - Prefecter)


BeautifulSoup4的安装及使用_依然稻草人_新浪博客




————

编辑于 2017-04-20

文章被以下专栏收录