131-1198-7613
NEWS
网站建设、网站制作、网站设计等相关资讯

bing必应下载_bing必应搜刮引擎(bing 必应)

首页 >> 新闻资讯 作者:磁力SEO 来源:磁力SEO - 搜索引擎优化技巧 日期:2025-02-19

  Beginning

  这次的博客,讲的是操纵python编写一个爬虫工具。为什么要写这个爬虫呢?缘故因由是小喵在看完《极黑的布伦希尔特》这个动画之后,又想看看漫画,成果发现各大APP都没有资源,最终好不等闲找到一个网站可以看,可是因为网速太渣,看起来额外的费劲。这时间如果能提前下载下来就好了。

  先上项目所在(github):https://github.com/miaoerduo/cartoon-cat。接待大家随时fork、star和指教。

  缘故因由就是这样,作为技术喵,任何标题都不能阻碍一颗爱漫画的心。所以标题就来了,挖掘机技修哪家强?

  在bing上搜索Python、爬虫框架。找到大家常用的框架。

  Scrapy似乎是个很不错的选择。至于相对于其他框架的优点,小喵没有细查,至少这个框架是之前听过的。可是在实现的时间发现有一些标题,scrapy不能直接抓取动态的页面。小喵须要抓取的网站的漫画都是操纵Ajax生成的。须要自己阐明各种数据,这个有点麻烦。

  那么有没有可以渲染页面的工具呢?像浏览器一样的?有。

  这里介绍两个工具:

  PhantomJs,可以大白是一个浏览器。不过它没有界面,我们可以通过js的代码模拟用户的行为。这就要求了解它的api并有js根本了。

  Selenium,这是个浏览器自动化测试框架。它依赖于浏览器(这个浏览器也可所以PhantomJs),通过Selenium可以模拟用户的行为。并且有Python接口,所以相对简朴一些。

  我们这个爬虫操纵selenium + phantomjs来实现。

  哟,这个爬虫软件应该有个响当当的名字。。。就叫漫画喵吧,英文名Cartoon Cat。

  下面我们一点点的介绍这个爬虫的实现过程吧。

  一、初生-情况搭建

  小喵这里选用Python作为开发语言,框架是selenium。缘故因由是python经常用来写爬虫,selenium可以用来模拟用户行为,PhantomJs是可选的,不过小喵最终会在一个办事器上运行,所以也是须要的。

  为了不影响本机上的python,我们还须要操纵virtualenv来创建一个自力的python情况。详细步伐如下:

  1. 安装virtualenv

  virtualenv是一个常用的用来创建python情况的工具。小喵用这个有两个缘故因由,一是为了不污染本机的情况,二是在本机直接安装库的时间出了一个权限的标题。

  virtualenv的安装很是简朴,操纵pip工具就可以安装。

  pip install virtualenv

  待程序实施结束,你就会开心的发现自己已经有了virtualenv这个工具了。

  2. 创建python情况

  virtualenv的操纵很是的利便。

  创建新的运行情况:virtualenv env-name

  进入响应的自力情况:source env-path/bin/activate

  实施完第一个指令后,就会创建成功一个python情况,实施第二个指令后,就会发现下令行的起始位置有厘革。这时间python、pip等工具就酿成操纵这个新情况的了,当然也可以操纵which python来查察。

  3. 安装selenium

  进入新情况后,pip安装的依赖库城市在新情况中安装,不会影响主机自身的python。操纵pip 安装selenium:

  pip install selenium

  至此,我们的底子情况就搭建完了。

  4. 安装PhantomJs

  这个只在从官网上下载就可以:https://phantomjs.org/download.html

  小喵的当地实施情况是Mac,所以下载了Mac版本。解压之后就可以操纵。

  二、寻觅-搜资源

  小喵想看的这个漫画貌似各大网站都没有资源,在费了九牛二虎之力后,终于找到了一个网站!https://www.tazhe.com/mh/9170/。

  每个网站的结构都不类似,因此都须要定制一套爬虫程序。本文的爬虫就只能针对这个漫画网站操纵,喵粉们须要爬其他网站的话,须要自己做响应的修改。

  三、阐明-资源阐明

  这里须要阐明两个页面,一个是漫画的首页,好比前面的:https://www.tazhe.com/mh/9170/

  另一个就是详细章节的页面。

  1. 首页

  为了减小图片的大小,小喵把窗口做了缩放。首页大致是这个样子。

图1 漫画首页

  各类信息很是的大白。我们关注的就是下面的漫画列表。通过Chrome强盛的查看元素的功能,我们当即就能定位到章节的位置。(对着感爱好的位置-右键-查看就能找到)

图2 章节的节点

  可以看到,章节所在的地域的id是play_0,学过前端的童鞋都应该知道,一个页面中id每每唯一标示一个节点。因此如果我们能够获取这个页面的话,查找id为play_0的节点就能一下子缩小搜索局限。

  而每个章节的信息都是一个a标签,标签的href是对应章节的详细网址,标签的文本部门是章节名。这样相对关系就得出了:div#play_0 ul li a。

  首页的阐明就到此结束。

  2. 章节页面

  我们随意打开一个详细章节的页面。好比:https://www.tazhe.com/mh/9170/1187086.html

  引入眼帘的是一个很干净的页面(的确是漫画界的清流,好多漫画网站上所有是广告)。

  我们把鼠标放在图片这个地域-右键-查看。

  咦,我们的右键怎么按不了?

  着实呢,这个现象在小说网站上遇到的机缘会更多。当我们看到比较精致的文字或是炫酷的图片,城市下意识的选中-右键-保存。而许多时间,这些资源都是有版权的。并不该该随意的流传(狠狠的打了自己的脸/(ㄒoㄒ)/~~)。因此限制鼠标右键会是一个很简朴却有用的举措。

  那么我们奈何绕过这个陷阱呢?

  很简朴,我们不用右键即可。打开浏览器的开发者工具选项,找到elements这个选项。可以看到一个复杂的结构(着实和上面查看元素之后的成果一样)。之后不绝的选中标签,当标签被选中时,左侧页面中对应的位置会有蓝色。多试反复,最终就能找到对应的位置。

图3 漫绘图片

  这是一个img标签,对应的id是qTcms_pic。这样找到这个id,就能找到这个img标签,凭据src就能找到图片的详细URI所在。

  接下来是找到下一张图片的所在。这时间须要查察下一页这个按钮的内容。用类似的方法,很等闲定位成功。

图4 下一页

  小喵本来是用scrapy来做爬虫的,看到这里的时间就坚决放弃了。我们阐明一下,选中的a标签的代码如下:

  a class="next" href="java:a_f_qTcms_Pic_nextUrl_Href();" title="下一页"span下一页/span/a

  比较简朴的网站,“下一页”可以用真的a标签和href属性来做。这样的优点是实现比较简朴,毛病是一旦获得网页源码就能很等闲的阐明。而像scrapy这样的爬虫工具只能抓取静态的代码(动态的须要自己阐明ajax,有点麻烦)。而显然这里的页面是动态的,操纵了ajax来实现。所以光是获得网页源码并不能真的获得图片,而是必需让其中的js代码运行才可以。所以我们才须要操纵浏览器或许PhantomJs这样的可以实施js代码的工具。

  上面的a标签的代码告诉了我们许多信息。首先是告诉了我们,这个节点的位置,通过next这个类名可以利便的找到该节点(着实有两个类名为next的按钮,另一个在下面,可是功能都一样)。其次,当这个按钮被点击时会挪用:a_f_qTcms_Pic_nextUrl_Href()这个js函数。岂非我们须要再研究这个函数?

  不用。因为PhantomJs的角色就是一个浏览器。我们只须要向真正的用户一样点击一下这个next按钮,就会进入下一个页面。/* 感受到这个工具的强盛了吗? */

  3. 鉴定章节的结尾

  最后一个标题就是,奈何鉴定这个章节结束了?

  我们跳到章节的最后一页,然后再次点击“下一页”,这时间会呈现一个弹窗。

图5 最后一页

  多次试验之后,我们会发现,只有在最后一页的时间才会弹出这个弹窗,这样的话,我们每抓取完一页,点击一次“下一页”,鉴定有无弹窗就知道是不是最后一页了。在右侧的开发者工具中我们能够看到,这个弹窗是一个id为msgDiv的div(并且它的呈现和消失是通过增减节点来实现的,另一种实现方法是将display设成none和block,这种情况可以凭据display的属性来鉴定)。所以我们鉴定这个节点存不存在就行了。

  至此,两种页面的阐明都完成了。下一步就最先我们的代码实现吧。

  四、逆袭——代码实现1. selenium的简朴用法

  from selenium import webdriver

  browser = webdriver.Firefox()

  # browser = webdriver.Safari()

  # browser = webdriver.Chrome()

  # browser = webdriver.Ie()

  # browser = webdriver.PhantomJs()

  browser.get('https://baidu.com')

  print browser.title

  # do anything you want

  上面是一个简朴的例子,第一步import依赖的库。

  第二步,获得一个浏览器实例。selenium支撑多种浏览器。操纵firefox之外的浏览器都须要下载驱动(selenium自己自带了firefox的驱动)。驱动下载所在:https://pypi.python.org/pypi/selenium。驱动下载完之后将它的路径到场到PATH里,确保驱动程序能够被会见到。或许显式的把驱动程序的所在当参数传入。像下面一样挪用:

  browser = webdriver.PhantomJs('path/to/phantomjs')

bing必应下载_bing必应搜索引擎 bing必应下载_bing必应搜刮引擎(bing 必应) 必应词库

  第三步,用get的方式打开网页。

  最后,通过browser对象来阐明和处置惩罚处罚页面。

  2. 获取章节的链接信息

  在上面的阐明页面的时间,我们知道了章节信息的位置:div#play_0 ul li a。这样就可以阐明出章节信息。browser支撑一大堆的选择器。大大简化我们查找节点的工作。

  from selenium import webdriver

  if __name__ == "__main__":

  driver = "path/to/driver" # 驱动所在

  browser = webdriver.PhantomJS(driver) # 浏览器实例

  main_page = "https://www.tazhe.com/mh/9170/"

  browser.get(main_page) # 加载页面

  # 阐明出章节的元素节点

  chapter_elem_list = browser.find_elements_by_css_selector('#play_0 ul li a') # 通过css选择器找出章节节点

  chapter_elem_list.reverse() # 原来的章节是倒叙的

  chapter_list = []

  for chapter_elem in chapter_elem_list:

  # 元素的text和href属性别离就是章节的名称和所在

  chapter_list.append((chapter_elem.text, chapter_elem.get_attribute('href')))

  # chapter_list 就是章节的信息

  3. 给定一个章节的所在,章节中的图片

  这一步涉及到节点的获取、模拟鼠标的点击以及资源的下载。selenium的点击实现出格的人道化。只须要获取节点然后挪用click()方法就搞定。资源的下载网上有许多教程,紧张有两个方法,通过模拟右键另存为,和获取url用其他工具下载。考虑到这里的右键不愿定可用,并且利用有一点点复杂。小喵选用了第二种方案。

  from selenium import webdriver

  from selenium.common.exceptions import NoSuchElementException

  import os

  from os import path as osp

  import urllib

  # 一个简朴的下载器

  download(url, save_path):

  try:

  with open(save_path, 'wb') as fp:

  fp.write(urllib.urlopen(url).read())

  except Exception, et:

  print(et)

  if __name__ == "__main__":

  driver = "path/to/driver" # 驱动所在

  browser = webdriver.PhantomJS(driver) # 浏览器实例

  chapter_url = "https://www.tazhe.com/mh/9170/1187061.html"

  save_folder = "./download"

  if not osp.exists(save_folder):

  os.mkdir(save_folder)

  image_idx = 1

  browser.get(chapter_url) # 加载第一个页面

  while True:

  # 凭据前文的阐明,找到图片的URI所在

  image_url = browser.find_element_by_css_selector('#qTcms_pic').get_attribute('src')

  save_image_name = osp.join(save_folder, ('%05d' % image_idx) + '.' + osp.basename(image_url).split('.')[-1])

  download(image_url, save_image_name) # 下载图片

  # 通过模拟点击加载下一页,寄望如果是最后一页,会呈现弹窗提醒

  browser.find_element_by_css_selector('a.next').click()

  try:

  # 找寻弹窗,如果弹窗存在,分析这个章节下载完毕,这个大轮回也就结束了

  browser.find_element_by_css_selector('#bgDiv')

  break

  except NoSuchElementException:

  # 没有结束弹窗,担当下载

bing必应下载_bing必应搜索引擎 bing必应下载_bing必应搜刮引擎(bing 必应) 必应词库

  image_idx += 1

  五、终焉-写在反面

  至此,漫画喵的打算思路和紧张的代码实现都介绍完了。上面的代码只是用来表现,小喵自己下载漫画用的代码是另一套。github的所在是:https://github.com/miaoerduo/cartoon-cat。项目只有100多行。不过也用了小喵不少的一段时间。

  博客写完了~小喵的漫画也下完了~

图6 下载好的漫画

  原文链接:https://www.miaoerduo.com/python/%E7%88%AC%E8%99%AB-%E6%BC%AB%E7%94%BB%E5%96%B5%E7%9A%84100%E8%A1%8C%E9%80%86%E8%A2%AD.html?utm_source=tuicoolutm_medium=referral

  作者:MIAO

  泉源:喵耳朵

Tags: 章节 爬虫 节点 页面 简朴 下一页 漫画 情况 就能 浏览器 所在 右键 工具 代码 是一个

服务热线

131-1198-7613

功能和特性

价格和优惠

获取内部资料

微信服务号