投稿    登录
欢迎来访~

meizi图会爬么?不会那我教你好了

Python Payne 8094浏览 8评论

扫码或搜索:进击的Coder

发送

即可立即永久解锁本站全部文章

meizi图会爬么?不会那我教你好了

声明:本文由一位知名的不知名Payne原创,转载请注明出处!后优化代码为52讲轻松搞定网络爬虫第一次实战课程为本节代码思路为基础,后自作聪明,书写。

本章节源码仓库为:https://github.com/Mr2753/PythonScrape/tree/master/GirlPhoto

写在最前面:本章适用于新手小白,代码规范化思路。

一言不合直接上代码!具体教程及思路总代码后!
所用解释器为Python3.7.1,编辑器为Pycharm 2018.3.5.
本着虚心求学,孜孜不倦,逼逼赖赖来这里虚心求学,孜孜不倦,逼逼赖赖,不喜勿喷,嘴下手下脚下都留情。

基础源码(我刚自学Python时候写的代码)

要爬就爬全站的,一两张一两个还不如另存为来的更加实际。啊哈哈哈

  1. 那咱们先来说说Meizitu的基本思路:

个人总结(四步法):发送请求, 得到响应, 解析数据, 保存数据(比较宏观的概念)

  •  众所周知啊(其实是个人理解):爬虫本质为模拟浏览器发送请求 ,倒推过来思考   既然是模拟请求,请求地址(URI)总得晓得吧。那么本次请求的URI为以下(单个图册):
    • MAIN_URL:https://www.mzitu.com/
    • Atlas URL:https://www.mzitu.com/226469
    • Specific URL: https://www.mzitu.com/226469/1
  • 模拟请求,既然是模拟请求怎么也得,模拟一下吧?被站长大大晓得了那不就被关在门外了。(站长“菇凉”说:“我家是给帅气的小哥哥用户访问的,你个程序来凑一凑不太好吧?”在我脑壳后面敲了敲,后就把我拒之门外,头也不会,扬长而去)经过我苦思冥想,仿佛得到了前所未有的启发,要不我们走走后门,让这个程序做个人?如此甚好。妙哉,妙哉。。。
    • 请求头一带谁都不爱。大叫一声还有谁,于是我就上啊。然而结果确实如此

    • reponse<200>
    • 经过我请求,他回应,他回应了爱你你(200),最后咱们握手了。菇凉,咱们还不够了解。需要多了解了解。我还没有成为无敌的男ying,我得多学习学习,争取早日娶你过门。(论一个渣男的锻炼与养成)
    • 好不容易进来了,本着虚心求教,好好学习,天天向上,不谈儿女私情的我,怎么也得有所收获吧。这是???渣男的修炼养成计划?这是宝贝啊!!!我得看看,学习学习。
    • 这还上锁啦?,这个可不香了。经过研究,一笑  你有你的的张良计,我有我的万能钥匙,Refer钥匙。配置Refer。走着。还不乖乖的。小意思啦。。。。就这样。

虽然不是用的同一张图片,BUT,有无图片是这Refer防盗链作祟的。

ok,nice。

各位看官,到这儿咱们也得进入真正的

说了这么多,让我们进入造的环节把,基础四步走,发起请求,得到响应,解析数据,保存!打完收工。

首先咱们是定义了一个自定义的用户代理,优点剩余稳定、简单易于操作,但缺点是比较繁琐。
为什么不用from fake_useragent import UserAgent 这个主要还是因为这个模块不大稳定,

至少我用的不太爽。而且既然自己阔以造轮子,为何不试着造一造呢?
说说User-Agent构造思路,首先是定义了一个User-Agent列表,然后从里面随机取一,作为相对本次User—Agent。

优化后的代码是直接定义了一个请求函数,这样如果需要请求是阔以直接调用这个函数,避免代码臃肿。无脑写requests。既不提升效率,也不简洁。还看着懵。有好的自然就要给好的,有时候对自己得好点。
注意请不要忽略异常捕获哦,这样会使咱们的爬虫小伙计更加健壮。爬虫的Strong在于考虑细致,全方面。这样成为一只成年的爬虫,虽然我也不晓得谁说的,我感觉还是蛮有道理的,如果真的没有人说,那就是我吧。。。。

这里是直接定义了一个请求方法,方便需要请求的时候直接调用。即可获得请求的效果

做个简单的小结:

`python
def main(page):
User_Agent(page)
index_html = scrape_index(page)
detail_urls = parse_index(index_html)
# 循环遍历提取出URI
for detail_url in detail_urls:

这样就可以得到所有的URI了:

2020-04-10 10:07:42,396 – INFO: scraping https://www.mzitu.com/206355…
2020-04-10 10:07:42,703 – INFO: Got detail_url https://www.mzitu.com/212891
2020-04-10 10:07:42,703 – INFO: scraping https://www.mzitu.com/212891…
2020-04-10 10:07:42,863 – INFO: Got detail_url https://www.mzitu.com/225494
2020-04-10 10:07:42,863 – INFO: scraping https://www.mzitu.com/225494…
2020-04-10 10:07:42,992 – INFO: Got detail_url https://www.mzitu.com/226142
2020-04-10 10:07:42,992 – INFO: scraping https://www.mzitu.com/226142…
2020-04-10 10:07:43,172 – INFO: Got detail_url https://www.mzitu.com/226078
2020-04-10 10:07:43,173 – INFO: scraping https://www.mzitu.com/226078…
2020-04-10 10:07:43,661 – INFO: Got detail_url https://www.mzitu.com/210338
2020-04-10 10:07:43,661 – INFO: scraping https://www.mzitu.com/210338…
2020-04-10 10:07:43,838 – INFO: Got detail_url https://www.mzitu.com/225958
2020-04-10 10:07:43,839 – INFO: scraping https://www.mzitu.com/225958…
2020-04-10 10:07:44,003 – INFO: Got detail_url https://www.mzitu.com/225784
2020-04-10 10:07:44,004 – INFO: scraping https://www.mzitu.com/225784…
2020-04-10 10:07:44,163 – INFO: Got detail_url https://www.mzitu.com/218827
2020-04-10 10:07:44,163 – INFO: scraping https://www.mzitu.com/218827…
2020-04-10 10:07:44,402 – INFO: Got detail_url https://www.mzitu.com/213225

然后就没有然后了呗
经过发现每个图集里面是后面加上page就是第几张图片,并且张数是不一样的,那怎么样解决呢?

多观察几个发现它只显示8个,第七个就是最大的页码数了,
那咱们把他提取出来,作为图集的page,放入循环不就可以拿到任意图集的所有了嘛!经过验证这是可行的。
既然这些又有了,那咱们请求它,存就好啦

 

最后加入多进程加快速度
改写源码如下

 

写到最后:  能看到这里,我相信你是非常想学的,单单看到这里是不可能学会的了,那么如果要去做,阔以尝试着与本章源码一起阅读。希望你能有所收获。

如果想要更好的运用到实际生活中,以爬虫为兴趣,以此为工作。阔以学习崔老师的52讲轻松搞定网络爬虫。祝生活愉快,完事顺心。期待我们下次见面

有问题,有疑问,欢迎在评论区留言,我将知无言,言无不尽。评论区期待你的出现

-Payne

 

 

转载请注明:静觅 » meizi图会爬么?不会那我教你好了

更多文章、联系博主、技术交流、商务合作

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

喜欢 (27)or分享 (0)

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

发表我的评论
取消评论

表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(8)个小伙伴在吐槽
  1. ddds地方
    dd2020-04-20 13:50 回复
    • ?请问
      Payne2020-04-20 19:08 回复
  2. 我好像被锁ip了 直接连不上了
    dcf2020-04-13 21:47 回复
    • 根据你的问题,我猜测并提出个人认为可行的解决思路。首先你直接用浏览器访问一下吧,如果可以访问,那么就是代码的问题。再次检查一遍代码,例如URL,是否正确,Header,异常捕获,等等这些是否有添加上。如果是被封IP了。个人亲测是在24hours后解除。可以换个IP访问(比如换个WIFI啊,用代理啊等等之类的)。如果还未解决请私聊我,亦或者可加我Wechat chenxi-0719-chenxi Payne
      Payne2020-04-14 01:29 回复
      • 是会锁IP 之前可以爬取,后面显示超时以后就直接爬取不了了,但是浏览器可以直接访问
        yi脸茫然2020-04-30 09:07 回复
        • 可以使用CTRL+F5强制刷新一下,如果浏览器可以继续访问,那就是你请求头之类的没加,或者少了。
          Payne2020-05-03 08:21 回复
  3. fsafasfsaf啊啊啊啊啊啊
    飞洒发2020-04-12 18:35 回复
    • 请问???
      Payne2020-04-13 00:06 回复