python爬虫--小说爬取

requests+bs4模块–简单爬虫实例–小说爬取

section1:声明

1、该文章所爬取内容为免费下载内容
2、自己的学习笔记,不会用于商用
3、本文如有侵权,请联系我删除文章!!!

section2:想法

我在学习bs4的时候,找爬虫实例,在小说方面,我找到的大部分都是把爬取内容放在不同的txt文件中,于是,我在想能不能把所有章节放在一个txt文件夹中。于是写了这篇文章。(顺便找几本小说看,嘿嘿)

section3:下载链接分析:

首先进入网站页面,选一本想要爬取的小说,然后右击检查,寻找规律。
在这里插入图片描述

寻找第一章节的位置,发现想要获取的链接,但同时发现在它上面还有几个节点(图中蓝色框中圈出来的地方),其实这个就是前面的最新章节的对应,和后面重复了,也是后期需要去掉的地方。

找到链接之后,进入链接。

接着检查,会发现章节内容所在位置。同时发现idcontent
在这里插入图片描述
那我们把内容提取出来就好了。

但为了方便小说阅读,不需要一章一章地打开txt文件,我们可以用列表,把所有内容放在一起,然后再下载。

具体看下一步

section4:代码编写

(我在代码部分也有所注释,包括是在哪一步解决上面的问题)

1、导包
import requests
import bs4
import os
2、构建请求头
headers = {
     'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
3、创建保存小说的文件夹
# 创建文件夹
if not os.path.exists('D:/爬虫--笔趣阁'):
    os.mkdir('D:/爬虫--笔趣阁')
4、构建获取小说名和章节链接的函数
def get_name_lists(url):  # 得到小说名字和章节链接列表
    response = requests.get(url=url, headers=headers)
    html = response.text
    soup = bs4.BeautifulSoup(html, 'html.parser')
    novel_lists = soup.select('#list dd a')  # 获取小说章节
    novel_name = soup.select('#info h1')[0].string  # 获得小说名
    novel_lists = novel_lists[12:]  # 去掉前面12节重复内容链接
    return novel_name, novel_lists
5、构建获取章节名和章节内容的函数
def get_content(url):  # 得到章节名和章节内容
    response = requests.get(url=url, headers=headers)
    html = response.text
    soup = bs4.BeautifulSoup(html, 'html.parser')
    name = soup.select(".bookname h1")[0].get_text()  # 得到章节名
    text = soup.select("#content")[0].get_text().replace('', "").replace('     ', '')
    text = text.replace('笔趣阁 www.52bqg.net,最快更新万古第一神最新章节!    ', '')  # 得到章节内容,并利用替换,去掉广告和空格
    return name, text
6、构建下载函数
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()
7、构建主函数
def main():
    list_all = list()  # 先定义一个空列表,方便之后把内容放在里面
    base_url = 'https://www.52bqg.net/book_126836/'
    novel_name, novel_lists = get_name_lists(base_url)  # 调用函数
    text_name = 'D:/爬虫--笔趣阁/' + '{}.txt'.format(novel_name)
    # for i in range(len(novel_lists)):   # 这个循环是爬取整本小说
    for i in range(0, 2):  # 学习笔记,所以只爬了前两节
        novel_url = base_url + novel_lists[i].get("href")
        name, novel = get_content(novel_url)  # 调用函数
        list_all.append(name)
        list_all.append(novel)
        print(name, '下载成功啦!!!')
    text_save(text_name, list_all)  # 调用函数
    print('本小说所有章节全部下载完毕!!!')
8、完整代码
import requests
import bs4
import os
headers = {
     'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
# 创建文件夹
if not os.path.exists('D:/爬虫--笔趣阁'):
    os.mkdir('D:/爬虫--笔趣阁')


def get_name_lists(url):  # 得到小说名字和章节链接列表
    response = requests.get(url=url, headers=headers)
    html = response.text
    soup = bs4.BeautifulSoup(html, 'html.parser')
    novel_lists = soup.select('#list dd a')  # 获取小说章节
    novel_name = soup.select('#info h1')[0].string  # 获得小说名
    novel_lists = novel_lists[12:]  # 去掉前面12节重复内容链接
    return novel_name, novel_lists


def get_content(url):  # 得到章节名和章节内容
    response = requests.get(url=url, headers=headers)
    html = response.text
    soup = bs4.BeautifulSoup(html, 'html.parser')
    name = soup.select(".bookname h1")[0].get_text()  # 得到章节名
    text = soup.select("#content")[0].get_text().replace('', "").replace('     ', '')
    text = text.replace('笔趣阁 www.52bqg.net,最快更新万古第一神最新章节!    ', '')  # 得到章节内容,并利用替换,去掉广告和空格
    return name, text


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()


def main():
    list_all = list()  # 先定义一个空列表,方便之后把内容放在里面
    base_url = 'https://www.52bqg.net/book_126836/'
    novel_name, novel_lists = get_name_lists(base_url)  # 调用函数
    text_name = 'D:/爬虫--笔趣阁/' + '{}.txt'.format(novel_name)
    # for i in range(len(novel_lists)):   # 这个循环是爬取整本小说
    for i in range(0, 2):  # 学习笔记,所以只爬了前两节
        novel_url = base_url + novel_lists[i].get("href")
        name, novel = get_content(novel_url)  # 调用函数
        list_all.append(name)
        list_all.append(novel)
        print(name, '下载成功啦!!!')
    text_save(text_name, list_all)  # 调用函数
    print('本小说所有章节全部下载完毕!!!')


if __name__ == '__main__':
    main()

section5:运行结果

在这里插入图片描述
在这里插入图片描述

因为是学习嘛,所以就只下载了两章,下载整本小说需要修改的地方,上一部分有说明的嗷。

section6:参考博文及学习链接

1、使用列表方法的思路来源

参考博文:点击此处获取

2、soup.select的一些学习方法

参考博文:点击此处获取

  • 15
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
好的,我可以为您介绍一下如何使用 Python 爬虫爬取房产数据并保存到本地。 首先,您需要选择一个合适的网站来进行爬取。例如,可以选择链家网、安居客等房产网站。然后,您需要分析该网站的页面结构和数据请求方式,确定需要爬取哪些数据,以及如何获取这些数据。 接着,您可以使用 Python 的 requests 库来发送 HTTP 请求,获取网页内容。然后,可以使用 BeautifulSoup 库来解析网页内容,提取需要的数据。 最后,您可以使用 Python 的 Pandas 库将数据保存到本地的 Excel 或 CSV 文件中。以下是一个示例代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 发送 HTTP 请求获取网页内容 url = 'https://bj.lianjia.com/ershoufang/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') # 解析网页内容,提取需要的数据 house_list = soup.find_all('div', {'class': 'info'}) data = [] for house in house_list: name = house.find('div', {'class': 'title'}).text.strip() price = house.find('div', {'class': 'price'}).text.strip() area = house.find('div', {'class': 'houseInfo'}).text.strip() data.append([name, price, area]) # 将数据保存到本地文件 df = pd.DataFrame(data, columns=['名称', '价格', '面积']) df.to_excel('house_data.xlsx', index=False) ``` 这是一个简单的示例代码,您可以根据您需要爬取的数据和网站的不同来进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱打瞌睡的CV君

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

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

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

打赏作者

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

抵扣说明:

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

余额充值