0%

最近想找点漫画看,发现芝士漫画这个平台不错,于是就想着下载来看。

安装 python

下载 python
下载好 python 安装包,安装时一路 next 过去,注意勾上“add to path”(一般是默认勾选的)。

安装所需的模块

本次的爬虫使用 requests 模块获取数据,再用 xpath 语法解析代码。
需要的模块包括 requests,lxml,reportlab。
使用 pip 安装

1
2
3
pip install requests
pip install lxml
pip install reportlab

写代码

  1. 新建一个 python 文件
  2. 导入相应的模块
1
2
3
4
5
6
7
8
9
import requests
import sys
import io
import os
import re
import time
from lxml import etree
from reportlab.lib.pagesizes import A4, portrait, landscape
from reportlab.pdfgen import canvas
  1. 定义全局变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0"
}

# 默认url
url = "https://manhua.zsh8.com/pxtt/pxtt-040/91864.html"

# 解析出url中的章节名
re_object = re.match(
"https://manhua.zsh8.com/.*?/(.*?)/.*?html", url)
chapter = re_object.group(1)

# 文件当前目录
current_dir = os.getcwd()
  1. 定义方法

    • get_text():得到访问返回的资源
    1
    2
    3
    def get_text(url):
    response = requests.get(url, headers=headers)
    return response
    • parse_text(text):分析文档,保存图片,并得到下一章的 url
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    def parse_text(text):
    # 建立解析
    html = etree.HTML(text, etree.HTMLParser())
    # 获取漫画图片所有的链接
    links = html.xpath("//div[@id='gallery-1']//dt/a/@href")
    for i, link in enumerate(links):
    save_image(link, i)
    # 降低访问的速度,防止被识别为机器人
    time.sleep(15)
    print("完成", i, "个......")
    print("已完成", chapter, "的下载!")

    # 在第一章的时候只有一个next_chapter链接
    try:
    next_chapter = html.xpath(
    "//div[@class='fusion-single-navigation-wrapper']/a/@href")[1]
    except Exception as e:
    next_chapter = html.xpath(
    "//div[@class='fusion-single-navigation-wrapper']/a/@href")[0]
    return next_chapter
    return next_chapter
    • save_image(link, index): 访问得到的图片链接,并保存在本地
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def save_image(link, index):
    read = requests.get(link)
    # 当前文件夹的加上章节名形成新的文件夹
    dir_ = current_dir + '\\' + chapter
    # 创建文件夹
    if not os.path.exists(dir_):
    os.makedirs(dir_)
    # 保存图片
    with open(dir_ + '\\{}'.format(str(index)+".jpg"), 'wb') as fp:
    fp.write(read.content)
    fp.close()
    • convert_images_to_pdf(img_path, pdf_path):根据图片的文件夹以及 pdf 文件夹加上文件名来生成 pdf 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def convert_images_to_pdf(img_path, pdf_path):
    pages = 0
    (w, h) = portrait(A4)
    c = canvas.Canvas(pdf_path, pagesize=portrait(A4))
    l = os.listdir(img_path)
    l.sort(key=lambda x: int(x[:-4]))
    for i in l:
    f = img_path + os.sep + str(i)
    c.drawImage(f, 0, 0, w, h)
    c.showPage()
    pages = pages + 1
    c.save()
    • begin():开始,并更新全局变量名
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    def begin():
    global url
    global re_object
    global chapter
    local_url = input(
    "输入要下载的章节url(例: https://manhua.zsh8.com/pxtt/pxtt-041/93181.html)\n>>>")
    # 判断是否符合url格式
    re_object = re.match(
    "https://manhua.zsh8.com/.*?/(.*?)/.*?html", local_url)
    if (re_object):
    url = local_url
    # 更新章节名
    re_object = re.match(
    "https://manhua.zsh8.com/.*?/(.*?)/.*?html", url)
    chapter = re_object.group(1)
    print("即将开始.....")
    else:
    print("输入错误!将使用默认链接!\n")
    • main():主函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    if __name__ == "__main__":
    begin()
    boolean = "y"
    count = 0
    # 保存pdf的文件夹
    if not os.path.exists(current_dir + '\\pdf\\'):
    os.makedirs(current_dir + '\\pdf\\')
    while(boolean == "y"):
    text = get_text(url).text
    next_chapter = parse_text(text)

    img_path = current_dir + '\\' + chapter
    pdf_path = current_dir + '\\pdf\\' + chapter + '.pdf'
    # 有些图片是错误,会导致无法生成pdf文件。
    try:
    convert_images_to_pdf(img_path, pdf_path)
    except Exception as e:
    print(e)
    re_object = re.match(
    "https://manhua.zsh8.com/.*?/(.*?)/.*?html", next_chapter)
    chapter = re_object.group(1)
    print("下一章节:", chapter)
    count += 1
    print(count)
    # 下载章节的数目,可根据自己需要更改
    if (count > 37):
    break
    url = next_chapter

运行

直接在终端运行 python 文件,等待一段时间,就会在 python 文件的当前目录下生成文件。
文件夹
文件夹里的图片:
图片
pdf 文件:
pdf

完整代码可参考我的github 库

准备

  1. 安装python3

  2. 安装 requests、lxml库

    1
    2
    pip install requests
    pip install lxml

    编码

  3. 导入模块和设置变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import re
    import os
    import requests
    from lxml import etree
    import io
    import sys


    url = 'https://cn.bing.com/'

    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537."
    "36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    }
  4. 使用requests库请求必应首页的资源

    1
    response = requests.get(url, headers=headers)
  5. 使用xpath解析出图片的名字与链接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 使用xpath解析得到数据
    html = etree.HTML(response.text, etree.HTMLParser())
    # 得到图片链接
    image_url = html.xpath("//head//link[@id='bgLink']/@href")[0]
    # 得到一个名字与版权的字符串
    filename = html.xpath("//a[@id='sh_cp']/@title")[0]
    # 使用正则表达式去年版权商
    re_object = re.match('(.*?)\s.*?\\)', filename)
    filename = re_object[1]
    # 因为得到 image_url 是没网址前缀的,所以需要加上
    pic_url = url + image_url
    filename = filename + ".jpg"
  6. 生成一个文件夹放置图片

    1
    2
    3
    4
    5
    # 当前的文件目录
    current_dir = os.getcwd()
    img_dir = current_dir + "\\bing_img"
    if not os.path.exists(img_dir):
    os.makedirs(img_dir)
  7. 保存图片

    1
    2
    3
    4
    5
    read = requests.get(pic_url)
    # 保存图片
    with open(img_dir + '\\{}'.format(filename), 'wb') as fp:
    fp.write(read.content)
    fp.close()

运行

在命令行下运行该文件,会得到一个文件夹,图片就放在里面。

github地址

为什么使用 Coding

现在国内访问 github 的速度已经非常慢了,而且百度的爬虫也无法抓取到 github page 上面的内容。
而 Coding 类似于 github,也是一个免费的代码托管平台,随便一个仓库都可以用来做静态网页服务,访问速度也还可以。

关于 github page 的使用可以参考我的上一篇博客使用 Hexo 和 GithubPage 免费搭建博客网站

注册

  • 打开Coding,注册账号。
  • 现在 Coding 只能注册团队了,不过五人以下是免费的。团队名称以及域名按自己喜好而填吧。

建仓

  • 全部项目 $\rightarrow$ 新建项目 $\rightarrow$ 代码托管项目 $\rightarrow$ 填写名称、标识 $\rightarrow$ 勾选启用 Readme.md 及公开源代码 $\rightarrow$ 完成创建。

配置

  • 项目设置 $\rightarrow$ 功能开关 $\rightarrow$ 打开持续部署和持续集成
    项目设置
    功能
  • 持续部署 $\rightarrow$ 静态网站 $\rightarrow$ 立即发布静态网站
    部署
  • 填写网站名字 $\rightarrow$ 保存
    保存

解析

  • 配置好后在静态网站选项里会有一个访问地址,先记好。
    address

  • 域名解析控制台 $\rightarrow$ 解析 $\rightarrow$ 修改 github 记录 $\rightarrow$ 解析路线设为境外
    github

    两个都记录都要改

  • 如果你之前在 github 设置了强制 https,那么在修改后,先暂停使用两个 github 记录,否则之后 Coding 申请证书会失败。不过建议还是要暂停一下,免得后面出现问题。

  • 添加两个记录,类型为 CNAME,主机记录分别为@和 www,记录值为刚才得到的访问地址。

    添加记录

  • 回到 Coding,点击右上角的“齿轮设置”,拉到下面“自定义域名”,分别绑定两个域名,如“www.jinl1874.xyz”和“jinl1874.xyz”。

  • 可以选择首选域名,也可以勾选跳转到首先,这样打开网站时地址栏就会默认是那个域名了。

  • 然后就默默地等申请证书成功,几分钟到十几分钟不等。最后显示证书状态为正常就算成功了。
    证书

  • 回到域名解析器,恢复 github 的域名解析记录。

绑定

  • 进入你的主目录[C://Users//xxx],勾选查看隐藏文件,找到.ssh目录,用记事本打开id_rsa.pub,复制全部内容。
  • 代码仓库 $\rightarrow$ 设置 $\rightarrow$ 部署公钥 $\rightarrow$ 新建部署公钥 $\rightarrow$ 粘贴到公钥内容 $\rightarrow$ 新建。

上传

  • 复制 Coding 仓库地址。
  • 打开项目配置文件_config.yml,修改deploy内容。
    项目
  • 打开命令行进入 Hexo 所目录,输入▶ hexo g -d。不久会跳出来一个提示输入账号密码的窗口,输入 Coding 的邮箱与密码,无误后会上传代码至仓库。

部署

  • 由于设置的是自动部署,代码上传后就会自动部署。
  • 可以打开浏览器,输入域名查看网站

至此,在 Coding 配置 Hexo 已经完成了。

欢迎访问个人博客主页jinl1874

问题

  • 每次将新文章使用“hexo d”推送后,再打开浏览器就会显示“404There isn’t a GitHub Pages site here”这个错误。

原因

  • 我们在自定义域名之前会在下图里“Custom domain”,
    setting
  • 点击“save”后,仓库的根目录会生成一个“CNAME”文件,
  • 但是本地的“public”目录里面并没有这个文件,所以更新会删除这个文件,就会导致访问失败。

解决方法

  • 在hexo的source文件夹下新建一个CNAME文件,内容如下。这样使用hexo generate就会在public目录生成CNAME文件了,这样推送过去后就不会删除了。
    solve
  • 添加文件后,重新生成推送后,问题就迎刃而解了。
    1
    hexo g && hexo d

欢迎访问个人博客主页 jinl1874

最近搭了个博客,就有较大放置图片的需求,于是就想搭了个图床。
其它的图床不是要收费就是使用体验非常差,经常出现上传错误。而七牛云有10G的免费空间,对个人用户而言足够了。再加上PicGo的使用,能很方便能上传图户并获取链接。


所需工具

七牛云,PicGo,备案好的域名。

1. 注册七牛云

  • 打开七牛云注册账号,进行个人账号认证。需要上传身份,有了支付宝的认证也不需要人工审核了,上传身份后就认证成功了。

    2. 创建空间

  • 管理控制台 $\rightarrow$ 对象储存 $\rightarrow$ 空间管理 $\rightarrow$ 新建空间。
  • 空间名称随便填,储存区域也可以随便选,访问控制选择公开,点击确定创建。

3. 注册2级域名

  • 域名控制台 $\rightarrow$ 解析 $\rightarrow$ 添加记录 $\rightarrow$
    域名控制
  • 记录类型选择CNAME,主机记录按自己喜好,记录值随便填一个能用的。
    域名

4. 绑定二级域名

  • 空间管理 $\rightarrow$ 域名管理 $\rightarrow$ 绑定域名 $\rightarrow$ 加速域名 $\rightarrow$填入子域名(如 <image.jinl1874.xyz>)。
    填入子域名

  • 绑定成功后会跳转,复制CNAME的值。

  • 回到域名控制台,修改刚才添加的记录,把CNAME的值放入放进记录值,然后保存。
    成功

  • 可能会有一段时间的等待,回到域名管理,如果下图红圈出成功,那么七牛云已经创建并绑定成功了。
    sucees

5. 使用PicGO

  • 推荐下载2.22版本

  • 安装成功后,打开PicGo设置,拉到最下面,勾选“七牛图床”。

  • 在图床设置,设置七牛图床。
    picGoSetting

  • 打开七牛云,进入密钥管理,复制AK和SK分别填到AccessKey和SecretKey;

  • 存储空间名即是你创建的对象存储的名字

  • 访问地址即你的http://+二级域名(如http://image.jinl1874.xyz)

  • 存储区域根据下图而填,我的是华南区,所以填Z2。
    area

  • 点击确定,建议设为默认图床。

  • 此时已经设置成功,可以在“上传区”上传图片。

到了此处,搭建图床的工作已经完成。

欢迎访问个人博客主页jinl1874