本篇是python自学的第一个里程碑,如python自学第一篇的计划,完成一个简单的爬虫。
爬虫说是简单,但是用一门正在学习的语言实现起来还是废了点劲。
本人比较喜欢漫画所以第一个目标就是爬点漫画来看看,第一个目标就选择了一个漫画站。从周二开始,到今天周四,花了快8个小时攒出了一个能动的爬虫,爬取一个连接的漫画。下面就来说说这里的心路历程。
先给大家看看选中的漫画目标,随机选的,不喜勿喷
爬取这个页面的时候,还是非常轻松的,主要使用了requests和beautifulSoup,轻轻松松就抓取到了标题和开始阅读的正文url。
title=bs.find('h2',class_='works-intro-title')... relative_url=bs.find('a',class_='works-intro-view')['href']
但是进入正文的url后,就傻眼了,怎么也获取不到图片的
标签,这是怎么回事呢,于是打印出beautifulSoup的内容看了一下才知道,原来漫画的主体部分都是js动态加载的,抓出来的都是代码而不是真正的html标签。于是开始了搜索解决方案,最后选择了selenium+chromedriver的方式来加载整个页面。
selenium直接使用pip安装,chromedriver请在下面地址下载
http://npm.taobao.org/mirrors/chromedriver/
请按照你的chrome浏览器的版本进行下载,下载的chromedriver解压到python.exe所在的文件夹。(这个应该是可以配置路径的,但我是一个初学者,请原谅我的愚笨,我还没有学到这个)。
这个时候再读取
就已经可以读取到了ul=bs.find('ul',class_='comic-contain')lis=ul.findAll('li')For li in lis: img_src=li.img['src']
但是下载了两个图片后,突然就报错了,再次debug整个beautifulsoup才发现,图片都是懒加载的,为了响应速度,前台也是想尽了办法。
这时,我的第一个想法是把查找下一个图片的js方法找到,但是打开浏览器的network一看,每一个图片是直接请求的,而不是通过统一的接口请求的
而且在所有加载的js资源中搜索了一圈也没有查到图片的相关操作(有点笨),所以就采用了暴力的方法,使用selenium+js模拟向下滚动
For step in range(50,100000,50): js="varq=document.getElementById('mainView').scrollTop="+str(step) driver.execute_script(js)
终于,所有图片在暴力下拉下,全部加载了,之后的下载也简单多了。
详细代码请见:
https://gitee.com/dean2083/python-learning
day3
坚持总会有收获。