大家好,关于漫画视频网站源码分享很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于漫画源码,带采集的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
前言
今天带大家爬取爬取网站漫画,废话不多说,直接开始~
开发工具
Python版本:3.6.4
相关模块:
requests模块;
re模块;
shutil模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
思路分析
漫画其实是一张一张图片来着,所以我们先找到这些图片的链接在哪里!因为本文是为了实现想看什么漫画就爬取什么漫画,所以搜索任一漫画,这里以神印王座为例,然后点进去进入详情页查看任一话;在浏览页中,网页源代码是没有我们需要的数据,所以需要打开开发者工具进行抓包,最终成功找到图片的链接。
找到图片链接后,接着就要想办法从该数据包中获取,也就是访问该数据包的链接,从数据包中提取图片链接。通过多页的数据包,观察以下数据包链接,发现chapter_newid每次翻页会发生变化的,comic_id是一本漫画的唯一标识。
https://www.kanman.com/api/getchapterinfov2?product_id=1&productname=kmh&platformname=pc&comic_id=5323&chapter_newid=1006&isWebp=1&quality=middle\\\nhttps://www.kanman.com/api/getchapterinfov2?product_id=1&productname=kmh&platformname=pc&comic_id=5323&chapter_newid=2003&isWebp=1&quality=middle\\\nhttps://www.kanman.com/api/getchapterinfov2?product_id=1&productname=kmh&platformname=pc&comic_id=5323&chapter_newid=3004&isWebp=1&quality=middle
接着查找这两个参数是从哪里来的。进入首页搜索神印王座,接着查看网页源代码,发现可以在网页源代码中找到进入漫画详情页的url;我试着用正则表达式和xpath语法进行提取时,发现困难重重,源代码中的HTML标签有很多的都相同的,且发现源代码中不止一本漫画。
接着我试着搜索其它漫画,发现源代码中没有,我才发现我掉坑里,后来发现该源代码是网站首页的源代码,大意了,泪目!但没关系,源代码中没有,我们去抓包。
打开开发者工具,进入Network中的XHR,搜索神印王座,第一次搜索的时候抓到一条数据包,不过他报红了:
但里面是有我们需要的内容的。不过因为报红,我们在开发者工具中是无法看到数据的,得点开数据包:
如果需要获取不报红的数据包,需要重新点击一下输入框,他就会加载出来了,如果只刷新网页和重新点击搜索他都是无法获取到的。
拿到数据包后,我们找到漫画的唯一标识comic_id,只需要该数据包中提取出来:
找到comic_id后,接着找chapter_newid。chapter_newid变化规律每本漫画他都是不同的;但如果你第一次搜索的是斗罗大陆,你会发现,chapter_newid他是递增式变化的。
那chapter_newid怎么找呢,进入到漫画的详情页,前面我们知道神印王座的第一话的chapter_newid是1006,那我们直接在开发者工具中搜索1006,最终在详情页源代码中找到:
那么我们知道,首个chapter_newid是详情页静态加载来的,可以在详情页的源代码中提取出来,而该网址是https://www.kanman.com/+comic_id构成的:
这里只要第一话的chapter_newid,那其它的从哪里得到呢?经过我的查找,发现后一页的chapter_newid是在前一页中获取到的:
代码实现
构建提取comic_id和chapter_id函数:
defget_comic(url):\\\ndata=get_response(url).json()[&39;]\\\nforiindata:\\\ncomic_id=i[&39;]\\\nchapter_newid_url=f&39;\\\nchapter_newid_html=get_response(chapter_newid_url).text\\\nchapter_id=re.findall(&34;chapter_id&34;(.*?)&39;,chapter_newid_html)\\\ndata_html(comic_id,chapter_id[0])
关键代码,如果以前爬取过微博评论数据的,就会发现,二者的套路差不多,翻页的数值都需要从前一页中获取:
defdata_html(comic_id,chapter_id):\\\ntry:\\\na=1\\\nwhileTrue:39;https://www.kanman.com/api/getchapterinfov2?product_id=1&productname=kmh&platformname=pc&comic_id={comic_id}&chapter_newid={chapter_id}&isWebp=1&quality=middle&39;https://www.kanman.com/api/getchapterinfov2?product_id=1&productname=kmh&platformname=pc&comic_id={comic_id}&chapter_newid={chapter_newid}&isWebp=1&quality=middle&39;$..chapter_newid&自第二条url开始,提取规则+1\\\nchapter_newid=jsonpath.jsonpath(comic_html_jsons,&39;)[2]\\\ncurrent_chapter=jsonpath.jsonpath(comic_html_jsons,&39;)\\\nforimg_and_nameincurrent_chapter:\\\nimage_url=jsonpath.jsonpath(img_and_name,&39;)[0]chapter_name中存在空格,所以需要用strip去除\\\nchapter_name=jsonpath.jsonpath(img_and_name,&39;)[0].strip()\\\nsave(image_url,chapter_name)\\\na+=1\\\nexceptIndexError:\\\npass
保存数据:
defsave(image_url,chapter_name):\\\nforlink_urlinimage_url:39;&39;/(\\d+.jpg)-kmh&创建章节标题文件夹\\\nos.mkdir(image_path)\\\nimage_content=get_response(link_url).content\\\nfilename=&39;.format(image_path,image_name)\\\nwithopen(filename,mode=&39;)asf:\\\nf.write(image_content)\\\nprint(image_name)\\\nget_img(chapter_name)39;__main__&39;请输入你要下载的漫画:&39;D:/数据小刀/爬虫④/漫画/{}/&根据用户输入的漫画名称创建文件夹\\\nos.mkdir(data_path)\\\nurl=f&39;#该url由去除不必要的参数得到\\\nget_comic(url)
保存的数据展示
文章分享结束,漫画视频网站源码分享和漫画源码,带采集的答案你都知道了吗?欢迎再次光临本站哦!
