今天就学了一下Python爬虫,于是想实践一下。刚好一周前在B站补完番《天使降临到我身边》——里面的小学生特可爱、情节也不错,心里就比较喜欢这部漫画,所以就想扒一些图片当壁纸。刚好,Python爬虫解决了批量抓取问题。

(C)椋木ななつ・一迅社/わたてん製作委員会。《天使降临到我身边》三大主角。

我就有个定向思维——官方的东西会好一些,所以目标直接打向官网(http://watatentv.com/story.html)。

13集的图片全扒!(别说我正在开车!)

不说了,现在就开始工作。

前提

如果你想顺利地完成,你得有一定的Python爬虫基础、HTML语言基础,会使用网页调试工具。要不然你会感觉很困难。

其次我希望各位不要先去看代码,尝试自己思考解决方案,按照提示自己去写代码。Python爬虫是需要日积月累才能很好的去使用。

步骤

先试着分析第一集网页吧!(超喜欢白咲花)

然后鼠标放在图片上,右键点击“检查”(各个浏览器操作方法可能不一样,推荐使用Google Chrome),就会弹开调试工具,并指向图片的元素。

通过分析,就发现ol里面有若干个li,每个li就有我们想要的img,而这六张图片是通过JavaScript来控制显示与隐藏的。

把鼠标移动到调试工具的img上,按照图片所示操作。

复制到的内容是BeautifulSoup的select字符串,如果把全部img的seletor字符串复制粘贴就是这样:

body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(1) > img
body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(2) > img
body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(3) > img
body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(4) > img
body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(5) > img
body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(6) > img

可见就只是li.nth-child(N)发生变化,那么发现了规律后就利用循环来控制变量,且可以指向不同的li元素。

可以先扒一个网页的照片。去敲键盘。

import requests
from bs4 import BeautifulSoup
import time
import urllib.request #下载方法多种,可选其他方法i = 1
url = "http://watatentv.com/story01.html"
resource = requests.get(url) #创建request对象
front = BeautifulSoup(resource.text, "html5lib") #创建BeautifulSoup对象,其中使用的库(html5lib)可以选择其他库
while i <= 6:e = front.select("body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(" + str('%05d' % i) + ") > img") #获得img元素print("正在下载" + "http://watatentv.com/" + e[0]["src"])urllib.request.urlretrieve("http://watatentv.com/" + e[0]["src"], "${filename}/" + str(int(time.time())) + ".jpg") #获得img元素的src属性(图片源),并下载到指定目录(${filename})。为保证文件唯一性,使用时间戳命名time.sleep(1) #为防止被墙停止一段时间i += 1
resource.close()

如果没有安装相应的库,你可以通过CMD(管理员身份运行),或者在PyCharm里面搜索安装,具体方法你自己找度娘吧!

效果图。速度特慢(没办法,日本站点),但最后还是成功了。

如果发现自己的文件夹有6个图片,那么就OK了。那么就解决第二个问题:如何批量扒其他12个页面的图片。

各位就试着点击其他集数的页面(也可以随便找找你喜欢的角色),并观察URL变化规律。

全部URL就是这样:

http://watatentv.com/story01.html(第一集)
http://watatentv.com/story02.html(第二集)
......
http://watatentv.com/story12.html(第十二集)
http://watatentv.com/story13.html(OVA版本)

且每个页面都差不多,就只是照片和面包导航栏不同(也可以查看每个页面的照片的BeautifulSoup select字符串)。因此每个页面要做的工作相同,可以利用循环控制变量变化,且另一个储存URL变量使其能随着规律来变化出不同的URL。

因此需要组成内嵌循环,最外面用于控制页面访问,最里面用于扒图片。

可以在原来的代码的基础上再次修改。

# 一些注释由于刚才写过,所以不重复
import requests
from bs4 import BeautifulSoup
import time
import urllib.requesti = 1
j = 1
while i <= 13:url = "http://watatentv.com/story" + str('%02d' % i) + ".html" #动态生成URLprint("正在抓取" + url)resource = requests.get(url)front = BeautifulSoup(resource.text, "html5lib")while j <= 6:e = front.select("body > div.wrap > div.main_wrap > div.story_wrap > div > div.story_box02 > div > div.story_bamen_wrap > div.story_box > div > ol.main > li:nth-child(" + str(j) + ") > img") #获得img元素 print("正在下载" + e[0]["src"])urllib.request.urlretrieve("http://watatentv.com/" + e[0]["src"], "${filename}/" + str(int(time.time())) + ".jpg")time.sleep(1)j += 1resource.close()i += 1j = 1 #复位,为下一个网页做准备

效果图。自家网速慢得要命,又加上直播,程序发生假死,不得不用阿里云的Cloud Shell,用Cloud Shell特爽,速度嗖嗖嗖。

效果图。如果使用Cloud Shell,你手速就得快点啦,因为半小时后空间会失效。建议压缩打包后再下载到本地。

好了,这次就把图给扒完了。终于可以看到这些可爱的小天使了。

搭配自己写的桌面壁纸切换程序,更香!(即将完工,敬请期待)

常见问题

  • 网速好慢,因此发生假死,应该如何解决?

尝试用别的连接方式,例如有线连接、无线连接、手机网络共享(手机也可以用移动数据嘛,用USB连接共享也好),如果实在没有办法,可以尝试使用阿里云的Cloud Shell来抓取,速度也比较快(马bb的平台肯定有保障)。

因此在执行之前一定要确保网速没问题。要不然全部图片白扒了。(除非你愿意改变变量)

  • Cloud Shell如何使用?

这个可以参考官方文档,关键是你得注册一个阿里云账号。

实质上你正在操控一个远程Linux主机。当然,你没法用root(别人的主机,还给你为所欲为呀!),但它本身已经有了Python,pip可以不用root使用。你手速得快点,因为如果你长时间没有任何操作主机就会被释放,因此程序里面的sleep()可以适当调小一点(不要小于1,除非你有别的文件命名方法),最好你在打开Cloud Shell之前做好相关准备。

上传代码和下载图片要根据官方方法操作,因此你不能使用SFTP工具上下传文件(毕竟IP、密码都不知道,弄个锤子)。上传代码没有问题。主要解决如何下载扒到的图片,这时你应该把扒到的图片统一放在一个文件夹(最好在程序那边设置下载到的目录),再执行压缩命令(因为不支持文件下载),然后下载就OK了。

由于主机本身没有beautifulsoup和html5lib库(可选其他库),所以要安装。

pip install html5lib
pip install beautifulsoup4
mkdir ${filename} //新建一个文件夹
python ./${python_program_name}
zip -r ${zip_name} ${filename} //${zip_name}为打包后的ZIP的名字,一定要有.zip后缀

目前遇到的问题就这么多,有问题可以留言,我有空可以解决。

选做

如果想继续扒,以下链接可以扒一下

https://twiani.com/%e3%80%90%e7%a7%81%e3%81%ab%e5%a4%a9%e4%bd%bf%e3%81%8c%e8%88%9e%e3%81%84%e9%99%8d%e3%82%8a%e3%81%9f%e3%80%912%e8%a9%b1%e6%84%9f%e6%83%b3-%e3%82%b5%e3%82%a4%e3%82%ad%e3%83%a7%e3%83%bc%e3%81%ab%e3%82%ab/(图片像素低)

https://originalnews.nico/163331

可以在Google搜索更多链接(启用支持日文搜索可以获得更好结果)

由于本人也是在知道怎么用的地步,所以可能有点问题,希望各位发现问题后反馈给我。

希望各位在Python学习之路顺利度过、收获颇多!

最后再来一句:“喵内!”

(C)椋木ななつ・一迅社/わたてん製作委員会

Python爬虫实践(入门篇)——抓取《天使降临到我身边》图片相关推荐

  1. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  2. Python爬虫包 BeautifulSoup 递归抓取实例详解

    Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到另 ...

  3. [Python爬虫] 三、数据抓取之Requests HTTP 库

    往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 一.urllib 模块 所谓网页抓取,就是把URL ...

  4. [Python爬虫] 四、数据抓取之HTTP/HTTPS抓包工具Fiddler

    往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 [Python爬虫] 三.数据抓取之Request ...

  5. Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除)

    Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除) import requests from bs4 import BeautifulSoup import ti ...

  6. Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接

    Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接 1. 前言 2. 实现过程 3. 运行结果 1. 前言 文章内容可能存在版权问题,为此,小编不提供相关实现代码,只是从js逆向说一说到 ...

  7. 关于Python爬虫原理和数据抓取1.1

    为什么要做爬虫? 首先请问:都说现在是"大数据时代",那数据从何而来? 企业产生的用户数据:百度指数.阿里指数.TBI腾讯浏览指数.新浪微博指数 数据平台购买数据:数据堂.国云数据 ...

  8. python——爬虫实现网页信息抓取

    首先实现关于网页解析.读取等操作我们要用到以下几个模块 import urllib import urllib2 import re 我们可以尝试一下用readline方法读某个网站,比如说百度 de ...

  9. python爬虫之app数据抓取_Python爬虫入门教程 29-100 手机APP数据抓取 pyspider

    1. 手机APP数据----写在前面 继续练习pyspider的使用,最近搜索了一些这个框架的一些使用技巧,发现文档竟然挺难理解的,不过使用起来暂时没有障碍,估摸着,要在写个5篇左右关于这个框架的教程 ...

  10. python selenium 爬取js加载的内容为空,Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容...

    1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第二部分,第一 ...

最新文章

  1. sql连oracle链接服务器
  2. pytorch 加载模型:
  3. ROS调用本地摄像头数据并在rviz里显示
  4. 方法的重载(overload)和重写(override)的区别
  5. 面试系列第1篇:常见面试题和面试套路有哪些?
  6. 为资产分类定义折旧范围_RFID固定资产管理系统方案
  7. iOS 应用启动慢的原因找到了!
  8. virtualenv搭建虚拟环境
  9. java byte转十六进制_Python 十六进制hexbytesstr之间的转换和Bcc码的生成
  10. SD-Host 控制器设计
  11. python 爬取生意参谋数据_如何爬取生意参谋数据?是不是违规操作?
  12. dell3900机型安装xp64位操作系统
  13. 外语学习的真实方法及误区
  14. win系统磁盘管理知识
  15. 完全免费:鲜为人知的桌面正文内容检索工具(支持epub/mobi/azw3/markdown)
  16. 傻妞旧版合集新版订阅
  17. 按住Alt键加小键盘数字出现的特殊字符对照表
  18. python爬取京东商品信息代码_爬取京东商品信息
  19. Linux系统新增磁盘初始化及挂载
  20. MATLAB初入门(一)

热门文章

  1. 关于 ConcurrentHashMap 1.8 中的线程探针哈希
  2. 电容麦克风的幻象供电
  3. 69 三角形计数(Triangle Count)
  4. RocketMQ生产者组topic和消费组的关系
  5. 刘墉:写给女儿的旅行百忌
  6. Okidoki - Alpha阶段项目展示 - TEAM LESS ERROR
  7. 刘慈欣,王晋康,何夕著《星际远征》
  8. 怎么查看html页面,网页浏览记录如何查看_怎样查历史网页浏览记录-win7之家
  9. 网站建设之邮件发送形式
  10. 任务间同步 | 信号量、互斥量和事件集