python:bs4爬取奥特曼,是不是所有奥特曼都长一样

利用python+bs4爬取奥特曼粉丝联盟的奥特曼图片,难点把其实也没有,就是爬虫不经常搞,容易忘记一些东西。废话不多说,直接上代码

主要引包

import os
from pathlib import Path
from bs4 import BeautifulSoup
from requests import Session

  • os模块在这里的功能就是判断路径是否存在的
  • pathlib模块主要是获取路径用的
  • BeautifulSoup就是解析库,也是主要的爬取数据库
  • requests库调用了Session(类似一个浏览器),主要用于请求获取页面的

代码整合

import os
from pathlib import Path
from bs4 import BeautifulSoup
from requests import Session



class UltramanCrawling:

    def __init__(self):
        self.s = Session()
        self.s.headers.update(
            {"User-Agent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"})

    def request_url(self, url):
        """
        返回解码后,然后再解析的html树
        :param url:
        :return:
        """
        response = self.s.get(url=url)
        response.encoding = "gbk"
        return BeautifulSoup(response.text, 'lxml')

    def handle_tree(self):
        """
        处理树
        :return:
        """
        soup = self.request_url("http://www.ultramanclub.com/allultraman/")
        # 拿到奥特曼一览版块
        ultraheros = soup.find("div", class_="ultraheros-Contents_Lists")
        # 拿到lists下的标签树
        ultraheros_lists = ultraheros.find("ul", class_="lists")

        name_lists, url_lists = [], []

        # 循环获取奥特曼名称,并插入列表
        for name in ultraheros_lists.find_all("p"):
            name_lists.append(name.text.rstrip())

        # 循环获取奥特曼头像,并插入列表
        for img_url in ultraheros_lists.find_all("img"):
            url_lists.append(img_url.attrs["src"].replace(".", "http://www.ultramanclub.com/allultraman", 1))

        return name_lists, url_lists

    def run_main(self):
        """
        爬虫入口,并执行存储操作
        :return:
        """
        # 利用enumerate函数,获取url_lists中的索引和值
        name_lists, url_lists = self.handle_tree()
        for i, url in enumerate(url_lists):
            # 图片地址取请求接口下载
            response = self.s.get(url=url)
            # 判断是否请求成功
            if response.ok:
                # 拿取路径,更换图片保存的后缀名,进行存错
                with open(self.is_exists(name_lists[i] + ".png"), 'wb') as save:
                    save.write(response.content)
        else:
            print("全部下载完成")

    @staticmethod
    def is_exists(name: str):
        """
        静态方法,执行路径判定是否存在
        :param name:
        :return:
        """
        base_dir = Path(__file__).parent.joinpath("UltramanImg")
        if not os.path.exists(base_dir):
            os.mkdir(base_dir)
        return base_dir.joinpath(name)


if __name__ == '__main__':
    # 创建对象,调用运行方法
    UltramanCrawling().run_main()

上述代码直接给封装成了一个爬虫类,里面的一些方法也都写了注释,有python基础的几乎都能看得懂,没啥技术难点。

展示结果

 

 

 

从结果可以看到,奥特曼都长一样的定义是错的,请相信这个世界有光,也请相信这个世界是有奥特曼的 !!!!!


以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;非常期待你的点赞和分享哟,谢谢!

未完,待续…

一直都在努力,希望您也是!

微信搜索公众号:就用python

作者:李 锋|编辑排版:梁莉莉  

posted @ 2021-11-16 21:18  一名小测试  阅读(176)  评论(0编辑  收藏  举报