python爬虫实践(三):爬取插画壁纸并发送邮件

一、前言

       pixiv网站是一个以插图、漫画和小说艺术为中心的虚拟社区网站。其初衷是为全球艺术家提供一个平台,发表他们作品,并透过评级系统反映用户意见。该网站以用户投稿的原创图画为中心,辅以标签、书签、作品回应、排行榜等功能形成具有其特色的社交网络。

       本文以pixiv站作为数据爬取对象,这里简称p站。本文工作内容主要可分为以下内容:

      编写本文是因为我在爬取大量插画后,希望把它发给手机端更换头像,以及想分享好看的图给好友。但是每次都需要自己手动压缩,然后再一个个地发送压缩包,难免觉得繁琐,因此想着用通过python实现自动压缩插画文件然后邮件发送。

二、爬取网页

       由前文《从0实现python批量爬取p站插画》可知,首先一个简单的爬取网页流程大致地分为三个部分,分别是指定请求url、设置headers、发起访问请求。对pixiv站月排行榜的插画网页部分进行数据爬取,首先已知月排行榜插画部分的网页地址,然后通过右键浏览器页面或者按F12进入网页inspect,查看network下面的XHR消息获取个人user-agent。代码实现如下:

import requests

if __name__ == "__main__":
    # 指定url
    month_rank_url = 'https://www.pixiv.net/ranking.php?mode=monthly&content=illust'
    # 设置headers
    rank_url_headers = {
        'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
        'User-Agent':'你的user-agent',
    }

    # 发起请求
    rank_res_data = requests.get(month_rank_url, headers=rank_url_headers)
    rank_res_code = rank_res_data.status_code

    # 如果请求成功,那么保存网页
    if rank_res_code == 200:
        with open('./rank.html', 'w', encoding='utf-8') as fp:
            fp.write(rank_res_data.text)
            print('rank.html下载成功!')
    # 否则
    else:
        msg = "请求失败!状态码为:"+str(rank_res_code)
        print(msg)

       运行成功后,可以看到目录下生成rank.html文件,打开显示如下内容:

              由上图可知排行榜的数据可以直接进行访问得到。进入到rank.html文件保存的文件夹,选择浏览器打开rank.html文件,显示p站的插画排行榜,可知p站月排行榜插画部分的网页内容爬取成功!

二、解析并构造数据

1、网页解析

       以上爬取p站月排行榜插画网页内容并下载到本地并不是本文的目的,而是开始批量爬取插画的第一步。要批量爬取插画,首先要对网页本身进行分析并对爬取的网页进行解析。使用浏览器打开下载的rank.html,然后按F12键或者右键第一章图片选择inspect检查网页,可显示如下图信息:

       由上图可知,所有的图片都存放在一个class类名为`ranking-items-container`的div标签内。每个图片通过一个section标签作为一个独立的部分存放在div内,section标签包含了该作品id、排名、标题、作者名等信息,里面嵌入的img标签包含了该作品的缩略图地址(注意了!!!这是构建插画原图地址的关键部分)、作者id等信息。这些信息构成了所要爬取插画的重要线索,因此需要对爬取的网页进行解析,获取到包含插画信息的所有section标签。

       网页的解析主要有三种方式,分别是正则表达式、beautiful soup、xpath,详细介绍与使用可以参照《python爬虫入门总结》。xpath具有较强的通用性与高效性,这里通过该方式对网页进行解析,关键代码如下:

# 如果请求成功,那么对网页进行解析
if rank_res_code == 200:
    # 获取网页原始内容
    rank_res_text = rank_res_data.text
    # 解析网页
    rank_res_etree = etree.HTML(rank_res_text)
    # 获取子标签
    rank_item_section = rank_res_etree.xpath('
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值