返回顶部
首页 > 资讯 > 后端开发 > Python >PythonScrapy实战之古诗文网的爬取
  • 722
分享到

PythonScrapy实战之古诗文网的爬取

2024-04-02 19:04:59 722人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录需求1. scrapy项目创建2. 全局配置 settings.py3. 爬虫程序.py4. 数据结构 items.py5. 管道 pipelines.py6. 程序执行 sta

需求

通过python,Scrapy框架,爬取古诗文网上的诗词数据,具体包括诗词的标题信息,作者,朝代,诗词内容,及译文。爬取过程需要逐页爬取,共4页。第一页的url为(https://www.gushiwen.cn/default_1.aspx)。

1. Scrapy项目创建

首先创建Scrapy项目及爬虫程序

在目标目录下,创建一个名为prose的项目:

scrapy startproject prose

进入项目目录下,然后创建一个名为gs的爬虫程序,爬取范围为 gushiwen.cn

cd prose
scrapy genspider gs gushiwen.cn

2. 全局配置 settings.py

对配置文件settings.py做如下编辑:

①选择不遵守robots协议

②下载间隙设置为1

③并添加请求头,启用管道

④此外设置打印等级:LOG_LEVEL=“WARNING”

具体如下:

# Scrapy settings for prose project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     Https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.html

BOT_NAME = 'prose'

SPIDER_MODULES = ['prose.spiders']
NEWSPIDER_MODULE = 'prose.spiders'

LOG_LEVEL = "WARNING"


# Crawl responsibly by identifying yourself (and your WEBsite) on the user-agent
#USER_AGENT = 'prose (+http://www.yourdomain.com)'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# Configure maximum concurrent requests perfORMed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 1
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
#COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
    'user-agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
}

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'prose.middlewares.ProseSpiderMiddleware': 543,
#}

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    'prose.middlewares.ProseDownloaderMiddleware': 543,
#}

# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'prose.pipelines.ProsePipeline': 300,
}

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

3. 爬虫程序.py

首先是进行页面分析,这里不再赘述该过程。

这部分代码,也即需要编辑的核心部分。

首先是要把初始URL加以修改,修改为要爬取的界面的第一页,而非古诗文网的首页。

需求:我们要爬取的内容包括:诗词的标题信息,作者,朝代,诗词内容,及译文。爬取过程需要逐页爬取。

其中,标题信息,作者,朝代,诗词内容,及译文都存在于同一个<div>标签中。

为了体现两种不同的操作方式,

标题信息,作者,朝代,诗词内容 四项,我们使用一种方法获取。并在该for循环中使用到一个异常处理语句(try…except…)来避免取到空值时使用索引导致的报错;

对于译文,我们额外定义一个parse_detail函数,并在scrapy.Request()中传入其,来获取。

关于翻页,我们的思路是:遍历获取完每一页需要的数据后(即一大轮循环结束后),从当前页面上获取下一页的链接,然后判断获取到的链接是否为空。如若不为空则表示获取到了,则再一次使用scrapy.Requests()方法,传入该链接,并再次调用parse函数。如果为空,则表明这已经是最后一页了,程序就会在此处结束。

具体代码如下:

import scrapy
from prose.items import ProseItem


class GsSpider(scrapy.Spider):
    name = 'gs'
    allowed_domains = ['gushiwen.cn']
    start_urls = ['https://www.gushiwen.cn/default_1.aspx']

    # 解析列表页面
    def parse(self, response):
        # 一个class="sons"对应的是一首诗
        div_list = response.xpath('//div[@class="left"]/div[@class="sons"]')
        for div in div_list:
            try:
                # 提取诗词标题信息
                title = div.xpath('.//b/text()').get()
                # 提取作者和朝代
                source = div.xpath('.//p[@class="source"]/a/text()').getall()
                # 作者
                # replace
                author = source[0]
                # 朝代
                dynasty = source[1]
                content_list = div.xpath('.//div[@class="contson"]//text()').getall()
                content_plus = ''.join(content_list).strip()
                # 拿到诗词详情页面的url
                detail_url = div.xpath('.//p/a/@href').get()
                item = ProseItem(title=title, author=author, dynasty=dynasty, content_plus=content_plus, detail_url=detail_url)
                # print(item)
                yield scrapy.Request(
                    url=detail_url,
                    callback=self.parse_detail,
                    meta={'prose_item': item}
                )
            except:
                pass

        next_url = response.xpath('//a[@id="amore"]/@href').get()
        if next_url:
            print(next_url)
            yield scrapy.Request(
                url=next_url,
                callback=self.parse
            )


    # 用于解析详情页面
    def parse_detail(self, response):
        item = response.meta.get('prose_item')
        translation = response.xpath('//div[@class="sons"]/div[@class="contyishang"]/p//text()').getall()
        item['translation'] = ''.join(translation).strip()
        # print(item)
        yield item
        pass

4. 数据结构 items.py

在这里定义了ProseItem类,以便在上边的爬虫程序中调用。(此外要注意的是,爬虫程序中导入了该模块,有必要时需要将合适的文件夹标记为根目录。)

import scrapy


class ProseItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 标题
    title = scrapy.Field()
    # 作者
    author = scrapy.Field()
    # 朝代
    dynasty = scrapy.Field()
    # 诗词内容
    content_plus = scrapy.Field()
    # 详情页面的url
    detail_url = scrapy.Field()
    # 译文
    translation = scrapy.Field()
    pass

5. 管道 pipelines.py

管道,在这里编辑数据存储的过程。

from itemadapter import ItemAdapter
import JSON


class ProsePipeline:
    def __init__(self):
        self.f = open('gs.txt', 'w', encoding='utf-8')

    def process_item(self, item, spider):
    	# 将item先转化为字典, 再转化为 json类型的字符串
        item_json = json.dumps(dict(item), ensure_ascii=False)
        self.f.write(item_json + '\n')
        return item

    def close_spider(self, spider):
        self.f.close()

6. 程序执行 start.py

定义一个执行命令的程序。

from scrapy import cmdline

cmdline.execute('scrapy crawl gs'.split())

程序执行效果如下:

我们需要的数据,被保存在了一个名为gs.txt的文本文件中了。

以上就是Python Scrapy实战之古诗文网的爬取的详细内容,更多关于Python Scrapy爬取古诗文网的资料请关注编程网其它相关文章!

--结束END--

本文标题: PythonScrapy实战之古诗文网的爬取

本文链接: https://lsjlt.com/news/118196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PythonScrapy实战之古诗文网的爬取
    目录需求1. Scrapy项目创建2. 全局配置 settings.py3. 爬虫程序.py4. 数据结构 items.py5. 管道 pipelines.py6. 程序执行 sta...
    99+
    2024-04-02
  • Python用正则表达式实现爬取古诗文网站信息
    目录分析古诗文网站1. 用正则表达式获取总页数2. 提取诗的标题3. 提取作者和朝代4. 提取诗的内容整理代码完整源代码总结分析古诗文网站 下图1展示了古诗文网站—》诗文 栏目的首页...
    99+
    2024-04-02
  • Python怎么用正则表达式实现爬取古诗文网站信息
    本篇内容介绍了“Python怎么用正则表达式实现爬取古诗文网站信息”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!分析古诗文网站下图1展示了古...
    99+
    2023-06-25
  • python爬虫入门实战之爬取网页图片
    本篇文章给大家带来了关于Python的相关知识,其中主要整理了爬取网页图片的相关问题,要想高效的获取数据,爬虫是非常好用的,而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程,下面一起来看一下,希望对...
    99+
    2022-07-11
    python
  • Python爬虫实战之用selenium爬取某旅游网站
    目录一、selenium实战二、打开艺龙网三、精确目标四、成功结语一、selenium实战 这里我们只会用到很少的selenium语法,我这里就不补充别的用法了,以实战为目的 二、打开艺龙网 可以直接点击这里进入:艺...
    99+
    2022-06-02
    Python selenium爬取网站 python爬虫
  • Python爬虫实战之爬取携程评论
    目录一、分析数据源二、分析数据包三、采集全部评论一、分析数据源 这里的数据源是指html网页?还是Aajx异步。对于爬虫初学者来说,可能不知道怎么判断,这里辰哥也手把手过一遍。 提示...
    99+
    2024-04-02
  • python爬虫实战项目之爬取pixiv图片
    自从接触python以后就想着爬pixiv,之前因为梯子有点问题就一直搁置,最近换了个梯子就迫不及待试了下。 爬虫无非request获取html页面然后用正则表达式或者beautif...
    99+
    2024-04-02
  • python爬虫实战之爬取百度首页的方法
    这篇文章给大家分享的是有关python爬虫实战之爬取百度首页的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代...
    99+
    2023-06-14
  • Python爬虫实战之爬取某宝男装信息
    目录知识点介绍实现步骤1. 分析目标网站2. 获取单个商品界面3. 获取多个商品界面4. 获取商品信息5. 保存到MySQL数据库完整代码知识点介绍 本次爬取用到的知识点有: 1. ...
    99+
    2024-04-02
  • python爬虫实战之爬取京东商城实例教程
    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧。 主要工具 scrapy BeautifulSoup requests ...
    99+
    2022-06-04
    爬虫 实例教程 实战
  • Python爬虫实战之使用Scrapy爬取豆瓣图片
    使用Scrapy爬取豆瓣某影星的所有个人图片 以莫妮卡·贝鲁奇为例 首先我们在命令行进入到我们要创建的目录,输入 scrapy startproject banciyuan 创建scrapy项目 创建的项目结构如下...
    99+
    2022-06-02
    Scrapy爬取图片 Python Scrapy
  • python实战之Scrapy框架爬虫爬取微博热搜
    前言:大概一年前写的,前段时间跑了下,发现还能用,就分享出来了供大家学习,代码的很多细节不太记得了,也尽力做了优化。 因为毕竟是微博,反爬技术手段还是很周全的,怎么绕过反爬的话要在这...
    99+
    2024-04-02
  • Python爬虫实战之虎牙视频爬取附源码
    目录知识点开发环境分析目标url开始代码最开始还是线导入所需模块数据请求获取视频标题以及url地址获取视频id保存数据调用函数运行代码,得到数据知识点 爬虫基本流程 ...
    99+
    2024-04-02
  • Python网络爬虫实战案例之:7000
    一、前言 本文是《Python开发实战案例之网络爬虫》的第三部分:7000本电子书下载网络爬虫开发实战详解。配套视频课程详见51CTO学院请添加链接描述。 二、章节目录 3.1 业务流程3.2 页面结构分析:目录页3.3 页面结构分析:详情...
    99+
    2023-01-31
    爬虫 实战 案例
  • Python实战使用Selenium爬取网页数据
    目录一. 什么是Selenium?二. 安装Selenium三. 爬取网页数据四. 模拟用户交互五. 处理动态加载内容1. 显式等待2. 隐式等待六. 小结一. 什么是Seleniu...
    99+
    2023-05-18
    Python Selenium爬取网页数据 Python Selenium
  • python实战项目:爬取某网帅哥图片
    前言我也不知道说啥了, 看呗,就当是一个案例练习吧,首先导入库from bs4 import BeautifulSoupfrom urllib.request import url...
    99+
    2023-06-02
  • python爬虫框架scrapy实战之爬取京东商城进阶篇
    前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧。 ...
    99+
    2022-06-04
    爬虫 实战 框架
  • Python进阶多线程爬取网页项目实战
    目录一、网页分析二、代码实现上一篇文章介绍了并发和多线程的概念,这次就来向大家上一个实战来讲解一下如何真正的运用上多线程这个概念。 有需要的可以看看我之前这篇文章:Python进阶篇...
    99+
    2024-04-02
  • Python项目实战:爬取网易云音乐评论
    前言相信大家都非常喜欢听音乐的吧,每一首歌背后都有一个故事,有爱情,有离别,有仇恨,有不舍等等,听着自己喜欢总会唏嘘,我不仅喜欢听歌,还喜欢看歌曲下面的评论,很多人都阐述了自己对歌曲的看法和理解,除了一些,你懂的..、废话不多说了。上代码吧...
    99+
    2023-06-02
  • Python爬虫实战之爬取京东商品数据并实实现数据可视化
    一、开发工具 Python版本:3.6.4 相关模块: DecryptLogin模块; argparse模块; 以及一些python自带的模块。 二、环境搭建 安装Python并添加...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作