社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类

梦想橡皮擦 • 4 年前 • 473 次点击  

爬虫百例专栏连载已经结束,欢迎订阅 🙈100 篇爬虫文章合计 29.9 元,每篇只需 2.9 毛钱 🙈

最新弄到一本不错的书《 中国妖怪故事(全集) 》,忽然想到做一个收集整理中国妖怪的网站应该挺有意思的,故得此文。
Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类

写爬虫前的分析工作

对于编写爬虫,很多时候找到一个目标网站,然后对该站点进行分析,总会找到一种途径获取到你想要的数据;还有一种情况就是今天这种了,我们碰到一个想法,觉得这个想法还不错,然后尝试抓取一些基本数据,在结合一下 PHP,JAVA 这些语言编一个网站出来,没准能获得不错的流量。

今天要抓取的数据是 中国妖怪,除了自己整理以外,找到一个数据源网站就显得很重要了,所以我直接打开百度一顿搜索,果然,以橡皮擦(https://dream.blog.csdn.net/)的智力还是很难想到一个市面上没有人做过的点子的。

虽然关于妖怪的网站不多,但还真有一个 知妖 。这个网站还真做了整理妖怪这么一个趣味性蛮强的工作,在这里为比我提前想到的 大佬,点个赞。

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
既然已经找到目标站点了,接下来的工作就比较简单了,分析走起。

先看数据量是否全,我经常在博客里面写的一句话是“只要人眼能看到的数据,爬虫都能抓取到”。这个网站由于是个人维护的,所以数据展示的比较全面,当然量也不是很大,合计 130 页左右,每次看到类似最后一页这样的描述,我就知道这网站爬取肯定有戏。

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类

获取分页地址规律

随便点击 1~2 页,就可以获取到分页的基本规律了。

https://www.cbaigui.com/page/4
https://www.cbaigui.com/page/3
https://www.cbaigui.com/page/130
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

可以看到上述地址中,页码就是一个单纯的数字。

编写正则表达式

本次的目标是获取到妖怪数据,爬虫爬取过程中允许出现一定的冗余数据,所以直接分析页面元素即可,看一下哪些数据有价值。

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
上图红框所示区域,为列表页面比较核心的数据,这里其实要抓取 2 个值,第一个是标题,第二个是标题点击之后的链接,抓取到链接,才可以获取到内页数据,即下面红框所示的 tag 标签区域。关于为何获取这个标签的原因,这里因人而异,我主要是为了获取标签之后进行相应的分类。

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
如果为了补全数据的完整性,你可以抓取头部的一些其他信息。里面包含一些朝代和妖怪的出处。
Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
分析完毕,在橡皮擦看来,最难的工作就做完了,剩下的就是写代码抓取了。

爬虫编写工作

这里大家需要注意下,该网站应该属于个人开发者,所以我们在爬取的时候注意限制一下爬取速度,爬的太快对网站造成影响就不好了。

接下来编码正式开始。

首先你可以通过一些正则表达式工具,先把正则匹配写好,其实这部分写好了,代码也就编写一大部分了。

该页面中用到了 2 处正则,第一个用来匹配标题与链接,正则如下:

第一个正则表达式:

<h2 class="post-title">[.\s]*<a href="(.*?)" rel="bookmark">(.*?)</a>
  • 1
  • 1

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
第二个正则表达式:

<a href=".*?" rel="tag">(.*?)</a>'
  • 1
  • 1

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
对于正则表达式写的严谨性,在本系列专栏中不做要求,够用,好用即可。

下面展示一下部分代码,核心代码已经完成,剩下的就交给你来实现啦!~

import requests
import re
import time


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}


def get_tags(url):
    res = requests.get(url, headers=headers)
    pattern = re.compile(
        r'<a href=".*?" rel="tag">(.*?)</a>')
    all = pattern.findall(res.text)
    print(all)


def get_list(page):
    url_format = "https://www.cbaigui.com/page/{page}"
    url = url_format.format(


    
page=page)
    res = requests.get(url, headers=headers)
    pattern = re.compile(
        r'<h2 class="post-title">[.\s]*<a href="(.*?)" rel="bookmark">(.*?)</a>')
    all = pattern.findall(res.text)
    for item in all:
        get_tags(item[0])
        time.sleep(1)


if __name__ == "__main__":
    total = int(input("请输入最大页码:"))
    for i in range(1, total):
        get_list(1)
    # get_tags("https://www.cbaigui.com/post-18153.html")


  • 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
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 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
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

运行之后,发现结果中有个 色欲 ?什么鬼?
Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
好奇心没忍住,找到链接点击了一下,好好的翻阅了一下相关信息,很有收获。
Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类

爬虫课后叨叨

完整的代码大家自行补齐即可,剩余部分都是数据存储相关内容了,你可以写到 csv 文件中即可。
爬虫爬取数据之后,会发现很多的趣味性,例如本案例就无形中给我补充了很多知识。

👯👯👯

广宣时间

如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号“ 非本科程序员 ”,了解一个非本科程序员是如何成长的。
博主 ID: 梦想橡皮擦 ,希望大家点赞、评论、收藏

Python 爬虫小课 2-9 中国妖怪数据库,运行中竟然发现有个色(he)欲(xie)妖怪分类
爬虫百例教程导航链接 : 专栏购买地址

以下内容无用,为本篇博客被搜索引擎抓取使用
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
python 是干什么的 零基础学 python 要多久 python 为什么叫爬虫
python 爬虫菜鸟教程 python 爬虫万能代码 python 爬虫怎么挣钱
python 基础教程 网络爬虫 python python 爬虫经典例子
python 爬虫 python 爬虫 python 爬虫 python 爬虫 python 爬虫 python 爬虫 python 爬虫
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
以上内容无用,为本篇博客被搜索引擎抓取使用

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74894
 
473 次点击