目录

  • 爬虫实战---动态网页内部加载
  • 复现爬虫漫画
    • 思路
    • 所有章节的标题和URL
    • 找到所有章节漫画内容
    • 保存漫画

爬虫实战—动态网页内部加载

动态网页的爬取和静态网页的爬取不一样,静态网页我们想要的资料都可以在HTML源码的页面找到,但是在动态页面中就找不到了(动态网页的内部加载可以)。下面的复现的例子是动态网页的内部加载:

复现爬虫漫画

目标漫画网站:请点击这里:动漫之家
目标漫画:请点击这里:妖神记

思路

  1. 找到所有漫画章节的url
  2. 找到所有章节漫画内容
  3. 保存漫画

所有章节的标题和URL

  1. 找到目标漫画后往下拉就可看到漫画的章节标题列表:
  2. F12>元素>选择页面一个元素检查就可以定位到章节列表了:
  3. 提取目录和目录URL
    目录所在位置:
# 要引入的库:
import os
import re
import time
import requests
from bs4 import BeautifulSoup
listurl = 'https://www.dmzj.com/info/yaoshenji.html'  # 目标URL
req = requests.get(url=listurl)  # 获取对应网页
req.encoding = req.apparent_encoding  # 解决乱码问题
html = BeautifulSoup(req.text, features='lxml')
html = html.find_all('ul', class_='list_con_li autoHeight')  # 由上图可知,目录在一个ul,calss=list_con_li autoHeight里
# print(html)
a_bf = BeautifulSoup(str(html), features='lxml')
a = a_bf.find_all('a')  # ul里还有一个<a href……></a>,进一步筛选
names = []  # 初始化目录列表
urls = []  # 初始化目录URL列表
for net in a[253:]:  #  前253个目录和后面的重复names.append(net.text)  # 保存文字目录urls.append(net.get('href'))  # 保存目录URL

代码效果:

找到所有章节漫画内容

  1. 随便点一个章节,F12查看网页源码。检查页面元素后发现漫画图片的URL。

    但是,如果按照静态网页的思维,这章节的漫画图片都应该在这里,但是刚才我们在“元素”的网页源码有看到漫画图片的链接,当我们在pycharm获取网页源码后发现,返回的网页源码并没有我们想要的漫画图片链接(见下图运行结果),还是因为图片是动态加载的,所以我们在网页源码时找不到想要的。
# 随机找一章漫画看是否返回漫画图片链接
import requests
from bs4 import BeautifulSouplisturl = 'https://www.dmzj.com/info/yaoshenji.html'
req = requests.get(url=listurl)
req.encoding = req.apparent_encoding
html = BeautifulSoup(req.text, features='lxml')
html = html.find_all('ul', class_='list_con_li autoHeight')
# print(html)
a_bf = BeautifulSoup(str(html), features='lxml')
a = a_bf.find_all('a')
names = []
urls = []
for net in a[253:]:names.append(net.text)urls.append(net.get('href'))headers ={'Referer': 'https://www.dmzj.com/view/yaoshenji/41919.html'
}
picreq = requests.get(url=urls[1], headers=headers)
req.encoding = req.apparent_encoding
print(picreq.text)


但是,因为这个网站的漫画时动态内部加载的,所以肯定通过某种规则来生成图片链接(写出来的代码肯定有规律的),那么我们开始吧!

  1. 寻找漫画图片链接的规律
    以第二章第一张图片为例,选择复制链接,去掉前后,留下这么一串数字:

    CTRL+F搜索,有三处定位:
    第一处定位:

    第二处定位:

    第三处定位:

    然后在pycharm返回的网页源码中也CTRL+F搜索发现,只有第一处定位是重合出现的,那么真相只有一个!就是它~规律就出来了:
import requests
from bs4 import BeautifulSoup
import reurl = 'https://www.dmzj.com/view/yaoshenji/41917.html'
r = requests.get(url=url)
html = BeautifulSoup(r.text, 'lxml')
script_info = html.script
pics = re.findall('\d{13,14}', str(script_info))  # 正则
chapterpic_hou = re.findall('\|(\d{5})\|', str(script_info))[0]  # 正则表达式,始终是逃不掉……
chapterpic_qian = re.findall('\|(\d{4})\|', str(script_info))[0]  # 正则
for pic in pics:url = 'https://images.dmzj.com/img/chapterpic/' + chapterpic_qian + '/' + chapterpic_hou + '/' + pic + '.jpg'  # 合成URLprint(url)

代码运行结果:

保存漫画

找到漫画的所有图片后,就要按章节来保存漫画:
组合代码:

import os
import re
import time
import requests
from bs4 import BeautifulSoup# 获取漫画目录
listurl = 'https://www.dmzj.com/info/yaoshenji.html'
req = requests.get(url=listurl)
req.encoding = req.apparent_encoding
html = BeautifulSoup(req.text, features='lxml')
html = html.find_all('ul', class_='list_con_li autoHeight')
# print(html)
a_bf = BeautifulSoup(str(html), features='lxml')
a = a_bf.find_all('a')
names = []
urls = []
for net in a[253:]:names.append(net.text)urls.append(net.get('href'))# 获取每章的漫画
i = 0
headers = {'Referer': 'https://www.dmzj.com/view/yaoshenji/41919.html'
}
for url in urls:headers = {'Referer': url}filename = names[i]i += 1os.mkdir(filename)  # 创建每一章节的文件夹req = requests.get(url=url)req.encoding = req.apparent_encodinghtml = BeautifulSoup(req.text, features='lxml')# html = html.scriptpics = re.findall(r'\d{13,14}', str(html))chapterpic_hou = re.findall(r'\|(\d{5})\|', str(html))[0]  # 输出是这样子的:['14237', '41917'],[0]的作用是选择列表第一个元素14237chapterpic_qian = re.findall(r'\|(\d{4})\|', str(html))[0]for pic in pics:if pic[-1] == '0':  # 这一段代码是排序用的,因为爬取的网址不是按照漫画顺序的,需要调整,末尾补0比较大小。url = 'https://images.dmzj.com/img/chapterpic/' + chapterpic_qian + '/' + chapterpic_hou + '/' + pic[:-1] + '.jpg'picturename = pic[:-1] + '.jpg'else:url = 'https://images.dmzj.com/img/chapterpic/' + chapterpic_qian + '/' + chapterpic_hou + '/' + pic + '.jpg'picturename = pic + '.jpg'dirname = filename + '/' + picturename  # 路径# print(url)data = requests.get(url=url, headers=headers).content# print(data)with open(dirname, 'wb') as f:  # 保存图片f.write(data)print('.')time.sleep(10)

运行结果:

没有开异步,会慢很多。
原文链接:请点击这里

爬虫实战之爬虫漫画(复现)相关推荐

  1. python爬虫实战,爬虫之路,永无止境

    python爬虫实战 好久没给大家跟新爬虫文章了,抱歉抱歉,这期给大家带来一篇小爬虫,希望大家喜欢,喜欢的来个关注,支持一下博主,谢谢各位了. 写代码了各位宝宝们 这里要注意一点就是要记得提前登录,c ...

  2. 爬虫实战之爬虫漫画(有意外发现哦~嘿嘿)

    这里写目录标题 漫画爬虫之动态加载(外部加载)--以知音漫客为例 思路 提取目录及其URL 获取漫画目录真正的URL 获取每话的漫画内容 保存图片 综合代码 漫画爬虫之动态加载(外部加载)--以知音漫 ...

  3. 入门小远学爬虫(二)(四)简单GET型网页爬虫实战——“前程无忧”爬虫岗位信息的爬取之正则概念以及Python中re库的简单应用

    文章目录 前言 一.正则表达式是什么? 二.正则表达式语法 1.简介 2.干货分享 三.re库 1.安装 2.用法 四.终于进入正题 小结 前言 这是本系列第一个实战项目的第四课,有关前三课相关的内容 ...

  4. 爬虫实战:爬虫加数据分析,重庆电气小哥一文带你分析重庆所有旅游景点

    寒假已经到了,玩是要玩的,作为一个地地道道的重庆电网小哥,今天想用python爬虫+数据分析 的方式告诉你重庆哪些地方好玩. 先上一张最后景区地点分布结果图 数据来源:去哪儿旅行 网址:去哪儿旅行-重 ...

  5. python微博爬虫实战_爬虫实战(一):爬取微博用户信息

    前言 最近做课设,是一个有关个人隐私安全的课题,在网上找了很多论文,最后上海交通大学的一篇硕士论文<面向社会工程学的SNS分析和挖掘>[1] 给了我很多灵感,因为是对个人隐私安全进行评估, ...

  6. scrapy框架开发爬虫实战——反爬虫策略与反反爬虫策略

    反爬虫.反反爬虫 简单低级的爬虫有一个很大的优点:速度快,伪装度低.如果你爬取的网站没有反爬机制,爬虫们可以非常简单粗暴地快速抓取大量数据,但是这样往往就导致一个问题,因为请求过多,很容易造成服务器过 ...

  7. nodejs爬虫实战_nodejs爬虫项目实战

    这篇文章主要介绍了NodeJS制作爬虫的全过程,包括项目建立,目标网站分析.使用superagent获取源数据.使用cheerio解析.使用eventproxy来并发抓取每个主题的内容等方面,有需要的 ...

  8. python微博爬虫实战_Python爬虫实战演练:爬取微博大V的评论数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家 ,作者: IT共享者 理论篇 试想一个问题,如果我们要抓取某个微博大V ...

  9. python爬虫实战-python爬虫实战一:分析豆瓣中最新电影的影评

    简介 刚接触python不久,做一个小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的影评(短评)做一个分析. 目标总览 主要做了 ...

最新文章

  1. qchart画完以后删除_Unity2019基础教程:TileMap搭建像素画场景关卡
  2. Java 8 - 收集器Collectors_实战
  3. 版本管理工具Git(2)git的使用
  4. 滑动窗口最大值-leetcode 239题
  5. python google drive api_使用google-drive-api python获取文件的链接
  6. android sqlite 查询时间,android – sqlite日期查询
  7. 第一次使用Sourcetree成功上传gitee记录
  8. 【今日CV 视觉论文速览】Part2 1 Feb 2019
  9. Everything is Serverless,从开源框架对比说起
  10. 用vs2008创建运行c++项目
  11. 使用 Python 进行线性搜索优化
  12. 龙卷风路径_ae龙卷风路径
  13. opencv获取设备ID和名称
  14. 怎么理解PKW和PZD,各有什么作用
  15. JavaScript中实现键值对的方法
  16. 十几套IT培训视频教程免费下载,为你节省几万元培训费用
  17. 蓝牙触摸板键盘延迟卡顿断连的问题
  18. Autolayout第三方库Masonry的入门与实践
  19. 【原创】-eclipse下连Hadoop报java.lang.OutOfMemoryError: Java heap space的解决办法
  20. LintCode Number of Airplanes in the Sky(Java)

热门文章

  1. sql语句练习题整理
  2. Linux实战教学笔记12-linux三剑客之sed命令精讲
  3. 美国队长的工资 python代码-Python到底是什么鬼?广科学姐靠它拿了5个offer!
  4. blneder 蜡笔
  5. HTML5新增标签属性
  6. 所有的android平板,[图]联想推出四款Android平板
  7. 长假多图-生活中产品的小细节
  8. 迭代算法和递归算法举例
  9. mongodb nginx代理问题
  10. 让学生用计算机给诗配画,全国信息技术优质课课稿《古诗配画》.doc