吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2378|回复: 9
收起左侧

[Python 转载] 小白学python之爬取《妖神记》作业

  [复制链接]
hshcompass 发表于 2021-1-9 19:02
本帖最后由 hshcompass 于 2021-1-9 19:04 编辑

目标:动漫之家《妖神记》爬虫,听课习作
目标网址:https://www.dmzj.com/info/yaoshenji.html
主要知识:
——自动判断、创建所需目录
——切片知识
——bs4解析库使用技巧
——网址拼接技巧
——初级防爬Referer
——爬取结果反向排序
——图片文件保存
——正则使用
——html.script
[Python] 纯文本查看 复制代码
'''-*- coding: utf-8 -*-
[url=home.php?mod=space&uid=686208]@AuThor[/url]  : hshcompass
@QQ      : 46215528
[url=home.php?mod=space&uid=238618]@Time[/url]    : 2021/1/9 14:38
@Software: PyCharm
[url=home.php?mod=space&uid=267492]@file[/url]    : 妖神记.py
'''
# 爬取动漫之家----Yaoshenji

# 导入库
import re, os, time, requests
from bs4 import BeautifulSoup

# 保存目录
save_dir = '妖神记'
if save_dir not in os.listdir('./'):
    os.mkdir(save_dir)

# 1 获取所有章节名称和章节链接

# 目标网址
url ='https://www.dmzj.com/info/yaoshenji.html'

# 发送请求,获取响应
response =requests.get(url)


# 提取数据,解析网页
soup = BeautifulSoup(response.text, 'lxml')

# 图片位于 ul 标签 下的 li 标签,具体链接是 a 标签
list_con_li = soup.find('ul', class_="list_con_li autoHeight")
cartoon_list = list_con_li.find_all('a')

# 章节名称、链接
charpter_names = []
charpter_urls  = []

for cartoon in cartoon_list:
    href = cartoon.get('href')
    name = cartoon.text
    charpter_names.insert(0,name)    # 没有使用 append 是因为章节是倒序排列,所以用 insert
    charpter_urls.insert(0,href)


# 2 根据每个章节链接获取所有图片链接
for i, url in enumerate(charpter_urls):
    """
    返回章节目录列表的索引位置
    """
    name = charpter_names[i]

    # 为每一章节创建目录
    # 避免创建文件夹报错 把 . 去掉
    while '.' in name:
        name = name.replace('.', '')

    # 创建章节目录
    charpter_save_dir = os.path.join(save_dir, name)
    if name not in os.listdir(save_dir):
        os.mkdir(charpter_save_dir)

        response = requests.get(url)
        html = BeautifulSoup(response.text, 'lxml')

        # 获取script 标签里的内容
        script_info = html.script

        # 找长度为 13 或 14 的数字,取出来并 转为 str 字符串
        pics = re.findall('\|(\d{13,14})\|', str(script_info))
        # print(pics)

        # 遍历取出来的数字
        for j, pic in enumerate(pics):

            # 有的是 13 有的是 14 ,对 13 位的数字末位补 0
            if len(pics) == 13:
                pics[j] = pic + '0'

        # 图片排序
        pics = sorted(pics, key=lambda x:int(x))

        charpter_hou = re.findall('\|(\d{5})\|', str(script_info))[0]
        charpter_qian = re.findall('\|(\d{4})\|', str(script_info))[0]

        headers = {
            'Referer': url,  # 初级反爬
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
        }
        # 拼接链接网址

        for idx, pic in enumerate(pics):
            # 如果最后一位数字是 0
            if pic[:-1] == '0':
                # 【:-1】 表示切片时不要最后一位,取到最后一位前面
                url = 'https://images.dmzj.com/img/chapterpic/' + charpter_qian + '/' + charpter_hou + '/' + pic[:-1] + '.jpg'
            else:
                url = 'https://images.dmzj.com/img/chapterpic/' + charpter_qian + '/' + charpter_hou + '/' + pic + '.jpg'
            print(url)

            # 保存图片名和图片保存图片路径
            pic_name =  '%03d.jpg' %(idx +1)  # 001-002-003.....199  避免图片数量超过设置,扩大一些
            pic_save_path = os.path.join(charpter_save_dir, pic_name)

            # 发送请求,下载图片
            resp = requests.get(url, headers = headers)
            # 如果状态码 正常 200,保存图片文件
            if resp.status_code == 200:
                with open(pic_save_path, 'wb') as f:
                    f.write(resp.content)
            else:
                print('链接异常')




第一次发贴,发出来就算成功。
请前辈老师帮忙批改作业。










免费评分

参与人数 4吾爱币 +2 热心值 +3 收起 理由
迟迟为归WPS + 1 用心讨论,共获提升!
chsezxj + 1 + 1 用心讨论,共获提升!
玄黄 + 1 用心讨论,共获提升!
phonly + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lpdswing 发表于 2021-1-9 19:24
能优化的地方很多啊
os.path.exists(save_dir) 替换掉那个遍历,
orange2478 发表于 2021-1-9 19:24
Cool_Breeze 发表于 2021-1-9 20:12
sunhuiwang 发表于 2021-1-9 20:15
不错,不错,学习了。有没有爬链家的
bandishui 发表于 2021-1-9 20:46
可以, 练练手
头像被屏蔽
Deuez 发表于 2021-1-9 22:05
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| hshcompass 发表于 2021-2-22 23:26
Deuez 发表于 2021-1-9 22:05
请问楼楼学爬虫看的什么教程啊,我也正要学呐。

建议到B站看看免费的视频。非常多的,很多不错。
头像被屏蔽
Deuez 发表于 2021-2-23 11:15
提示: 作者被禁止或删除 内容自动屏蔽
likeme 发表于 2021-2-23 17:59
这本有生之年作品,难道已经完本了?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表