使用bs4爬取《孙子兵法》(处理string属性遇见<br>标签时提取为空)

在家太无聊了,最近正在重拾大一学的爬虫技术,只能说时过境迁,忘得都差不多了。

这不昨天偶尔发现了一个网站(嘿嘿)准备浅试一波。

呕吼,孙子兵法!浅读一下?

import requests
from bs4 import BeautifulSoup
import re

if __name__ == '__main__':
    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 Edg/105.0.1343.42'
    }
    base_url = 'https://www.gushici.net'  # 提取共同网址特征
    book_url = base_url + '/book/225/'
    # 爬取网页内容
    page_text = requests.get(url=book_url, headers=headers).text
    with open('../Spider/孙子兵法.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    fp = open('../Spider/孙子兵法.html', 'r', encoding='utf-8')
    soup = BeautifulSoup(fp, 'lxml')
    a_list = soup.select('.bookcont dl > dd > a')  # 获取每个篇章对应的超链接的a标签
    # print(li_list)
    for a in a_list:
        detail = a['href']  # 获取文件超链接
        detail_url = base_url + detail  # 获取最终每个篇章对应的网址
        print(detail_url)
        detail_text = requests.get(detail_url,headers=headers).content  # 获取内容
        detail_soup = BeautifulSoup(detail_text,'lxml')
        title = detail_soup.select('.shici-box > h1 > span > b')[0].string  # 获取文章题目
        print(title)
        # 文件存储,按照篇章名称命名
        with open('../Spider/'+re.split('·',title)[1]+'.txt','w',encoding='utf-8') as file_content:
            contents = detail_soup.select('.shici-box-text > p')
            for content in contents:
                graph = content.string  # 注意br标签
                # 由于中间<军行篇>中间会在p标签中遇见一个<br>标签,而使用content.string时string属性只能匹配成对的标签,所以不进行处理会直接报错。
                # 这里我采取的方式是将content转为字符串后再用正则将<br>标签去除掉,然后再次生成BeautifulSoup对象,之后再进行处理
                if str(graph) == 'None':
                    new_Content = str(content).replace('<br/>', '')
                    new_Soup = BeautifulSoup(new_Content)
                    graph = new_Soup.select('p')[0].string
                file_content.write(graph+'\n')
                # print(graph)
            print(re.split('·',title)[1]+'.txt'+'存储完毕!')

不知道大家感不感兴趣哈,反正我之前就对爬虫情有独钟,感觉很NB的东西,一直不敢尝试。

但其实,试过才知道,这种发自内心的喜悦是别人体会不到的。尤其是在中途发现问题和解决问题的时候。

所以,如果你也想学或正在学的话,一定要坚持下去哦。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值