听说多肉站案例不能采集了,那自行建设一个吧。爬虫120例复盘之战

Posted 梦想橡皮擦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了听说多肉站案例不能采集了,那自行建设一个吧。爬虫120例复盘之战相关的知识,希望对你有一定的参考价值。

本篇博客是《爬虫120例》的复盘案例更新,原文为《技术圈的【多肉小达人】,一篇文章你就能做到》,案例出了一点小小问题,网站没了,很尴尬
此时就需要我们的爬虫训练场出马了,谁叫咱的口号是 让天下没有失效的爬虫 呢!

文章目录

在正式编写本案例前,我还是找到了一个目标站点,即使用自建站,一些基础数据还是要提前采集一下的

www.huabaike.com/drzw/

采集目标站点

我们建设爬虫训练场,仅需要名称和图片即可,详情不在本次的采集范围内,并且数据量不多,仅使用 requests + re 模块即可,正好,和《技术圈的【多肉小达人】,一篇文章你就能做到》 文章涉及的技术点一致。

由于在多肉小达人那篇博客中已经涉及了所有基础要点,这里直接展示代码部分。

import requests
import re

headers = 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/90.0.4430.85 Safari/537.36"


def get_list():
    """
    获取全部详情页链接
    """
    all_list = []
    res = requests.get("https://www.huabaike.com/jingtian/", headers=headers)
    res.encoding = 'utf-8'
    html = res.text
    start = '<div class="zhiwuImg">'
    end = '<div class="clear"></div>'

    html = html[res.text.find(start):]
    html = html[:html.find(end)]

    pattern = re.compile(
        '<img src="(.*?)" height=".*?" width=".*?" title="(.*?)" alt=".*?">')
    all_list = pattern.findall(html)

    return all_list

def save_img(title, url):
    try:
        img_res = requests.get(url, headers=headers)
        img_data = img_res.content
        print(f"抓取:url")
        with open(f"images/title.png", "ab+") as f:
            f.write(img_data)
    except Exception as e:
        print(e)

def run():
    url_list = get_list()
    for url, title in url_list:
        save_img(title, url)

    print(url_list)

if __name__ == "__main__":
    run()

下图是运行中的效果。

最后是下载到文件夹中的效果。

运行相同的逻辑,将其他分类下的多肉图片也采集到本地。等全部运行完毕,我们就有了下图所描绘的素材总量,鸡150个多肉图片。

在爬虫训练场中建设多肉站点

素材准备完毕,接下来再次回到旧文案例中,其采集过程分为了2个步骤,如下所示:

  1. 通过分页地址获取详情页
  2. 通过详情页获取图片

在爬虫训练场中,我们也将模仿该效果。

搭建列表页

通过采集,生成 JSON 格式数据

为了准备一个列表页,需要采集一些基本文字信息。采集代码如下所示。

def get_detail_text(detail_url):
    res = requests.get(detail_url, headers=headers)
    res.encoding='utf-8'
    data = res.text
    pattern = re.compile('<blockquote>[\\s\\S]*<p>(.*?)</p>[\\s\\S]*</blockquote>')
    detail = pattern.findall(data)
    if detail is not None:
        return detail[0]
    else:
        return None

得到对应数据之后,就可以进行 JSON 格式的数据拼接了。

搭建详情页

外联别人素材,同时下载素材做好备份

由于带宽原因,能用目标站点的资源,我们就用目标站点素材,先看一下图片是否有防盗链设置。

测试办法非常简单,在本地爬虫训练场项目中加载任意图片即可。

<div class="container">
    <img src="https://img.huabaike.com/uploads/allimg/sltimg/201702/58ae3f4ee7fc0.jpg" alt="">
</div>

测试发现正常渲染,那前文获取到的JSON数据就可以直接使用了。

案例访问地址

爬虫训练场

总结

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 868 篇原创博客

👇 全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

以上是关于听说多肉站案例不能采集了,那自行建设一个吧。爬虫120例复盘之战的主要内容,如果未能解决你的问题,请参考以下文章

伤腰的Python爬虫案例,零基础必备实战教程

Python多线程爬虫入门级案例,采集整站图片素材!

爬虫5年保更新专栏异步协程典型案例,一篇掌握~

一篇文章,采集四个网站,它们是阳光理政,图虫网,书伴网,半次元网

基于Scrapy爬虫框架的全站新闻数据采集案例

8. 爬虫训练场,第一个爬虫目标页设计,单页爬虫案例