Python-爬虫(爬虫练习 爬取古诗文网五言绝句)

目标网站

采用的数据解析方式:xpath、bs4、re正则

获取网站中所有的五言绝句诗词链接

from bs4 import BeautifulSoup
import re


# 获取五言绝句代码链接,以列表的形式返回
def _getLink(html):
    html_data = BeautifulSoup(html, 'lxml')
    five_html = str(html_data.find_all('div', class_="typecont")[0])

    ret = re.findall('<span><a href="(.*?)" target="_blank">', five_html)
    return ret

获取对应古诗页面中,古诗的题目和内容

from lxml import etree


# 合并列表中所有字符串
def GetMsg(iterable):
    ret = ""
    for i in iterable:
        ret += i
    return ret


# 获取古诗题目,作者
def _getPoetryTitle(data):
    html = etree.HTML(data)
    title = GetMsg(html.xpath('//*[@id="sonsyuanwen"]/div[1]/h1/text()'))
    msg = GetMsg(html.xpath('//*[@id="sonsyuanwen"]/div[1]/p/a/text()'))
    return title + " " + msg


# 获取古诗正文
def _getPoetryText(data):
    html = etree.HTML(data)
    # //*[@id = "sonsyuanwen"]/div[1]/div[2]
    msg = GetMsg(html.xpath('//*[@id ="sonsyuanwen"]/div[1]/div[2]/text()'))
    return msg

主函数爬取过程

import requests

from getLink import _getLink
from getPoetry import _getPoetryText, _getPoetryTitle

url_root = "https://so.gushiwen.cn"

main_page = "/gushi/tangshi.aspx"

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

if __name__ == '__main__':
    response = requests.get(url_root + main_page, headers=headers)

    file = open("五言绝句.txt", 'w', encoding='utf-8')

    if response.status_code != 200:
        print('获取主页面失败,程序退出')
        exit(-1)
    html = response.text

    # _getLink获取所有要请求的链接
    link = _getLink(html)

    # 请求每一个链接
    for _url in link:
        _response = requests.get(url_root + _url, headers=headers)
        if response.status_code != 200:
            print('获取子页面失败,程序退出')
            exit(-1)
        data = _response.text
        if file is None:
            exit(-1)
        print(f'{_getPoetryTitle(data)}爬取开始')
        file.write(f"                              {_getPoetryTitle(data)}\n")
        # 写入取诗歌内容
        file.write(_getPoetryText(data))
        file.write("====================================================\n")
        print(f'{_getPoetryTitle(data)}爬取结束')

    # 写入完成后关闭文件
    file.close()
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUC_Dodamce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值