Python爬虫——简单爬取(从网站上爬取一本小说)

从笔下文学网站爬取一本名为《剑来》的小说,作者为烽火戏诸侯

网站网址如下:https://www.bxwxorg.com/

①通过查看网页源码找规律(在此之前请弄清楚网站允许爬取的部分,就该网站而言,没有限制)

②编写代码,实现功能

import requests
from bs4 import BeautifulSoup  # 引入BS库


def text_save(filename, data):  # 定义函数将列表中数据写入到文件中,filename为写入的文件,data为要写入数据列表.
    file = open(filename, 'w', encoding='utf-8')
    for i in range(len(data)):
        s = str(data[i]).replace('[', '').replace(']', '')  # 去除[]
        s = s.replace("'", '').replace(',', '') + '\n'  # 去除单引号,逗号,每行末尾追加换行符
        file.write(s)  # 将列表中数据依次写入文件中
    file.close()
    print("保存文件成功")


res = requests.get('https://www.bxwxorg.com/read/6964/')
html = res.text
soup = BeautifulSoup(html, 'html.parser')
find_title = soup.find('div', id="info")  # 查找书名和作者名字的父级标签
title = find_title.find('h1')  # 获取书名
author = find_title.find('p')  # 获取作者名字
print('书名:', title.text, '\n作者:', author.text[5:])  # 打印书名和作者名字
find_intro = soup.find('div', id="intro")  # 查找书籍简介的父级标签
intro = find_intro.find('p')  # 获取书籍简介
print('简介:', intro.text)  # 打印书籍简介
list_all = []  # 创建一个列表,为之后临时存放小说内容做铺垫
global m    # 定义全局变量,记录列表中的元素个数
global n    # 定义全局变量,记录之后列表中需要切片的位置(即最新章节部分所占的位置)
m = -1
n = 0

find_list = soup.find('dl')
lists = find_list.find_all('dd')  # 查找章节内容的父级标签
for list_n in lists:
    a = list_n.find('a')
    name = a.text  # 获取章节名称
    chapter_url = a['href']  # 获取章节链接
    res1 = requests.get(chapter_url)  # 开始根据章节链接获取章节内容
    html1 = res1.text
    soup1 = BeautifulSoup(html1, 'html.parser')
    find_article = soup1.find('div', id="content")
    articles = find_article.find_all('p')
    print(name, chapter_url)
    list_all.append([name])  # 将得到的章节名称加入到列表中
    m = m + 1
    if name == "序章":
        n = m - 3   # -3是为了给小说名字,作者姓名以及小说简介空出位置留待之后替换使用
        print(n)
    for article in articles:  # 通过循环遍历得到小说一章节的内容并将其写入到列表中
        list_all.append([article.text])
        m = m + 1
list_m = []
list_m = list_all[n:-1]  # 通过切片去掉小说前面的最新章节部分,避免与之后重复,并将其赋值给一个新的列表
list_m[0:3] = [title.text, author.text, intro.text]  # 将列表中前三个元素替换为小说名字,作者姓名以及小说简介
text_save('剑来.txt', list_m)  # 调用函数将列表内容存储到TXT文件中

③结果如下

第一次编写爬虫程序,比较没有思路,本程序通过列表方法暂存数据以实现写入txt文件,比较耗时,如果有更好的方法希望可以教教我。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值