Python爬虫(二)“我想要很多很多的表情包”

Python爬虫之二:“我想要很多很多的表情包”

哈哈hhh,标题写的神神经经的不知所云,其实这是一个关于图片抓取的小运用程序。

一、前期准备

        打开百度贴吧中的“表情包吧”-->"http://tieba.baidu.com/p/5059180075",这是我们的表情包来源。打开开发者调试,抓取一张图片,其实就是一个标签:
34e5/6652f8de b48
f8c54c02193ed33 292df5e1fe7f01.jpg" size="15478" width="262" height="251">
我们要做的就是抓取页面的所有的图片的 src 资源路径:
src="https://imgsa.baidu.com/forum/w%3D580/sign=a4d059db24f5e0feee1889096c62 34e5/6652f8de b48 f8c54c02193ed33 292df5e1fe7f01.jpg

Python爬虫(二)“我想要很多很多的表情包”_第1张图片
        我们首先运用正则表达式把页面的所有标签筛选出来。关于"爬虫",我的理解是根据我们的需求从网页中找到我们需要的内容,如果用字符串匹配的话if-else够我们写到天荒地老了(不信你可以写个demo识别一个字符串如"-12.3"等是不是数字看看),所以正则表达式在爬虫中起了至关重要的作用,然而要用好正则表达式并没有那么简单,一个美式笑话"When you find a problem can use regular expressions to solve, so you have two problems"。
        Python的正则表达式使用方法封装在了re模块里,在程序里 import 进来就可以用了。
        先说在html文件里匹配标签的正则表达式怎么写吧:r'
解释一下,同一个页面的同类型的img标签,按正常的写法『<img class="BDE_Image"』这一部分是固定的了,接续还有src属性,width属性,height属性等(顺序不一定固定),除了src 属性都不是我们关心的内容,直接用“通配符”『.*?』匹配就好了(『.』 表示匹配除了换行符外的任何字符;『*?』这里是指匹配前面的『.』 零次或多次,非贪婪模式);关键是写好src属性的匹配:『src="([^"]*\.jpg)"』,其中『[^"]』指生成一个字符类(一个字符集合,可以匹配集合里的任一字符),『^』是脱字符,这里指的是取反,也就是生成的字符类里包含除了『"』的所有字符,『*』指匹配前面的『[^"]』 零次或多次。还有提高效率的一点是用小括号『()』将图片的地址括起来进行分组,因为我们用正则表达式模式对象的findall()方法时,会找到所有匹配的内容,并将它们组织成列表返回,像
[34e5/6652f8de b48
f8c54c02193ed33 292df5e1fe7f01.jpg" size="15478" width="262" height="251">,
.....]这样的列表,而我们需要的只是图片的地址,所以我们还要在里边把图片的地址给提取出来,子组很方便就解决了这一问题:因为在findall()方法中,如果给出的正则表达式包含了一个或者多个子组,就会返回子组中匹配的内容,如果存在多个子组,那么它还会将匹配的内容组合成元组的形式再返回。这里只有一个元组,所以返回的自然就是图片的地址了。

二、.py程序

程序也很简短,30行代码,没办法,“人生苦短,我用Python!”。
Python爬虫(二)“我想要很多很多的表情包”_第2张图片
结果就是我们用30行代码换来了500多张表情图,妈妈再也不用担心我和你们斗图了!
Python爬虫(二)“我想要很多很多的表情包”_第3张图片

你可能感兴趣的:(Python)