社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python爬取图片,一言不合就要开车!

python • 7 年前 • 418 次点击  

分析

  • 浏览网站的时候,网址格式都为https://lieqishi.com/index.php/fuli/show/id/{文章编号},文章编号为1~3363(手工试出来的),后期网站增加这个值还会变大。

  • 很多图片需要登录后才能查看,不登录只能看到一张图片。

  • 登录后有些文章有翻页。

  • 有些文章需要消费金币才能查看,这个我就没办法了。(但是猜测有bug,消费一次后,再次查看还需要消费)

使用Fiddler进一步分析

  • 登录的时候是这个url,https://lieqishi.com/index.php/api/ulog/login?username=UserName&userpass=123456,使用GET方法,没有POST数据。

  • 登录之后需要查看的图片是这个网址返回html的,https://lieqishi.com/index.php/fuli/show/pay/{文章编号},返回的是url加密的数据,需要解密。

  • 可以使用Cookies的方式保持登陆。

  • 利用Chrome的F12查看网页代码,show页面中用#content 下的img标签来定位位置,取得图片的实际href。

  • pay页面中解密之后,直接用img标签来定位位置,取得图片的实际href。

  • 对于翻页的,取得当前页面下一页按钮(class=‘layui-laypage-next’)中的href是否与本页一致,不一致则表示有下一页。第二页的链接为https://lieqishi.com/index.php/fuli/show/pay/{文章编号}/2

实现功能点

  • 实现模拟登录,获取相应的cookies。用于后面的请求。

  • 循环获取所有文章对应的show和pay页面中的img标签的href,做成数组。

  • 用文章编号创建文件夹,把此文章下面的show和pay的img全部下载下来。

  • 随机获取user-agent,模拟不同浏览器浏览。

  • 文件存在则提示下载过,不再下载。

遇到的问题

  • ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

  • 此问题是由于Fiddler开着,会转发,关掉即可。

  • Max retries exceeded with url

  • 对于打开url获取img增加三次重试功能。

  • 对于下载图片的时候,出现报错等待几秒。

  • 设置requests.get的timeout。

  • 通过浏览器看到的url可能不是你实际要采集的url,一定要用Fiddler分析下。

To-Do-List

  • 为防止被反爬虫

  • 可以多申请几个账号,每次随机登陆某个账号。

  • 使用代理的方式去登陆,浏览网页或下载图片。代理地址可以爬取http://www.xicidaili.com/。

  • 文章编号范围可以设的很大,然后连续五个页面没有返回的话,就停止爬取。

  • .......

  • 但是我不想搞了。:)

此代码仅供参考,有违反什么的话,请告知。

文章著作权归作者所有,如有侵权,请联系小编删除


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/j5VKiph3QU
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4527
 
418 次点击