用Python爬取知乎妹子图片
这次呢,笔者给大家分享的是爬取知乎的妹子图,嗯,你懂的。
![9af7b9306a07180d35926c2b90d8b5e6.png](https://i-blog.csdnimg.cn/blog_migrate/0291a605f02057688047f1cc530788dc.jpeg)
话不多说,直接看战果。
![76cf4686814e10fd3cfafee417d281ee.png](https://i-blog.csdnimg.cn/blog_migrate/6b104fe1b9b64dfeb08f757786f3b41a.jpeg)
![7ff629a75da87307319f94b459070de9.png](https://i-blog.csdnimg.cn/blog_migrate/e9912d6b036b1bc06c73ede596350fd9.jpeg)
嗯,还是很不错的,值得我们去爬取。下面说一下整个过程的实现。页面分析
本次爬取的是知乎话题下所有回答的所有图片,如下
![99145054f16922e1c580a59c56d3b99f.png](https://i-blog.csdnimg.cn/blog_migrate/b5fb7706fc48c6e605451a98bc4e523d.jpeg)
我们可以看到这个话题有811个回答,所以呢,爬取的图片也是很多的,共爬取了1996张图片。
我们知道我们要爬取的是图片,然后图片呢是嵌套在内容当中的,所以我们只要能找到怎么获取到内容,就能将图片爬取下来。
我们按f12进行开发者模式,在右边的name中找到了answers为开头的名。
![7223f6e9ab396850340b446e551f4547.png](https://i-blog.csdnimg.cn/blog_migrate/83c44c9420d2f2e85740796f0d2cf403.jpeg)
通过英文名字,我们猜测这个可能就是我们要找的内容,打开右边的Request URL,看到了一大堆数据,包括id,用户名,当然,也包含我们要找的内容。如果感觉看不清这些数据,可以放到 在线json校验工具进行解析。可以看到,里面有个content属性,里面就是用户回答的内容,图片的链接就包括在里面。
![c6835e28802a01657aa028e4f3c27a2a.png](https://i-blog.csdnimg.cn/blog_migrate/3f779798d6bfcf6a210a9ba8b0b7b55a.jpeg)
现在呢,我们知道要怎么获取数据了,但还有一个问题,就是怎么爬取全部用户的回答内容,因为刚才的链接只能取到前3个用户的回答。通过链接我们发现里面有两个参数可以改变,分别是offset和limit,通过英文单词可以知道前者是指偏移量,即查询的数据从哪一个回答开始,后者是最多展示的回答数量。所以呢,会点英语还是挺重要的。
然后笔者通过试验,发现了limit最大是20,所以我们只要改变offset就行,limit固定为20。代码爬取
首先就是要获得所有页面数据的url
![82c5a377b7b62da2d7d15e8951988cc2.png](https://i-blog.csdnimg.cn/blog_migrate/610f389093fe6d298ac1975912916e86.jpeg)
之后我们通过json解析和正则表达式匹配获得图片的url
![60454d7bfe6b39a84a5903f8fed25bb3.png](https://i-blog.csdnimg.cn/blog_migrate/717c8f91915b3dc2699df66c61583658.jpeg)
最后就是将二进制数据写进图片中,即下载图片
![ce8716b98760b603446cbc61e0e9dcdb.png](https://i-blog.csdnimg.cn/blog_migrate/99ec70459f9ad310e9f705382a03e682.jpeg)
之后运行,等待了漫长的时间,终于下载完了。如图,用了1467秒,20几分钟。
![009f57381b81b7913a4a67d3e940614c.png](https://i-blog.csdnimg.cn/blog_migrate/b806044d23b975e546c1117c63d95eaf.jpeg)
这个过程感觉太久了,所以改了一下程序,用多线程下载。
![952793b67ef74f79317647b9f413aab0.png](https://i-blog.csdnimg.cn/blog_migrate/8a075778be0e73a1b421bf99576193a7.jpeg)
加上上述代码就行。
![0832d490dc223b75435adee4083a6372.png](https://i-blog.csdnimg.cn/blog_migrate/589ea18a156a1f4b52d776b10342f7eb.jpeg)
如上,快了好几倍。