首页 > 编程语言 >Python实践(1):使用爬虫将小说保存为txt文件

Python实践(1):使用爬虫将小说保存为txt文件

时间:2023-03-23 13:57:43浏览次数:57  
标签:Encoding Python 爬虫 html urls path txt response

本文将介绍如何利用Python编写爬虫程序将想看的小说以txt格式保存到电脑上

涉及的知识:爬虫,html,正则表达式

本文将以《安娜·卡列尼娜》小说在线阅读_列夫·托尔斯泰 (sbkk8.com)这个网站为例,其他的网站代码格式略有不同,但爬取的思路类似

(1)找到想看的小说的章节选择页面,将该页面另存下来

 

(2)用文本编辑器打开下载的html文件,如果结构太乱难以阅读,可使用html格式化工具将html代码进行制表符缩进格式化,我常使用的是HTML格式化 、HTML压缩- 站长工具 (sojson.com)

(3)找到所有向小说正文页面跳转的链接,查看网页源代码并获得这些链接

以Edge为例,在网页元素上右键单击,选择"检查",调出控制台,再右键单击想选取的html元素,选择"复制"->"复制JS路径",复制该元素的路径

进行网页的爬取,注意,这一步因为网页格式的不同需要多次调试,为了节约远端服务器响应资源,也为了防止自己的电脑因为访问过于频繁被远端服务器拉进黑名单,建议将网页下载到本地后调试

下列代码用于将目录页面中所有指向正文的网址提取出来

# !/usr/bin/python
# -*-coding:utf-8-*-

import requests
from bs4 import BeautifulSoup

def getContent(path):
    Encoding='gbk' # 设置相应的字符集,如果出现乱码,可尝试更换为utf-8
    if(path[0:7]=="http://"):
        #从网络获取
        response = requests.get(path)
        response.encoding = Encoding
        return response.text
    else:
        #从本地获取
        return open(path,encoding=Encoding).read()

    

# dist="http://book.sbkk8.com/waiguo/anna_kalienina/"
dist="./《安娜·卡列尼娜》小说在线阅读_列夫·托尔斯泰.html"

data = getContent(dist)
soup = BeautifulSoup(data,"html.parser")
f=open("urls.txt","w",buffering=1)

for i in range(1,68):
    chapters=soup.select("#left > div.mulu > ul > li:nth-child("+str(i)+") > a")
    print(chapters[0].get('href'))
    f.write(chapters[0].get('href')+'\n')

导出的链接保存在urls.txt文件中

(4)爬取正文

依次读取urls.txt文件中存储的网址,并获取其文字内容,写入到文件中.

注意,网址要过滤掉行末的回车,否则会404

# !/usr/bin/python
# -*-coding:utf-8-*-

import requests
from bs4 import BeautifulSoup
import time

def getContent(path):
    Encoding='gbk' # 设置相应的字符集,如果出现乱码,可尝试更换为utf-8
    if(path[0:4]=="http"):
        #从网络获取
        response = requests.get(path)
        response.encoding = Encoding
        return response.text
    else:
        #从本地获取
        return open(path,encoding=Encoding).read()


f=open("urls.txt","r",buffering=1)
urls=map(lambda x:x.replace(' ','').replace('\r','').replace('\n',''),f.readlines())
f2=open("安娜·卡列尼娜_列夫·托尔斯泰.txt","w",buffering=1)

for u in urls:
    time.sleep(1)
    data=getContent(u)
    soup = BeautifulSoup(data,"html.parser")
    title=soup.title.string
    content=soup.select("#content")[0].get_text()
    print(title)
    print(content)
    f2.write(title+'\n')
    f2.write(content+'\n')

这一步为访问服务器设置时间间隔,同样是出于节约远端服务器响应资源并防止自己的电脑被拉进黑名单的考虑

对于结构不同的网站,将代码略微修改即可

 

标签:Encoding,Python,爬虫,html,urls,path,txt,response
From: https://www.cnblogs.com/isakovsky/p/17247206.html

相关文章

  • chatgpt写程序-python小游戏-2048-pygame
    闲的没事,用chatpgt弄了个小游戏,2048,利用pygame实现,无额外贴图。只需要告诉他写个python游戏2048,只用pygame实现,不要额外贴图。然后在他暂停后说请继续,最后会有一些bug,把报......
  • Python中的重试机制
    ====引用自https://www.jb51.net/article/254886.htm(一文详解Python中的重试机制)这里要给大家介绍的是一个第三方库-Tenacity(标题中的重试机制并并不准确,它不是Python......
  • python 视频中找关键
    #!/usr/bin/envpython#coding:utf-8#@author:sSWans#@file:main.py#@time:2018/1/1115:54importosimportrandomfrom_datetimeimportdatetimei......
  • Python 一键安装全部依赖包
    使用piprequirements.txt用来记录项目所有的依赖包和版本号,只需要一个简单的pip命令就能完成.pipfreeze>requirements.txt生成的文件会像这个样子alembic==1.0......
  • python redis keepalive 保活
     https://dxian.github.io/2016/07/21/python-redis-subscribe-tcp-keepalive/ https://github.com/opennumber/opennumber/blob/bab590c29ab227bbcf1c301cf454c0e668......
  • Python中使用requests和parsel爬取喜马拉雅电台音频
    场景喜马拉雅电台:https://www.ximalaya.com/找到一步小说音频,这里以下面为例https://www.ximalaya.com/youshengshu/16411402/关注公众号霸道的程序猿获取编程相关电子书......
  • Python中使用高德API实现经纬度转地名
    场景高德API提供给开发者们一些常用功能的接口,其中有一种叫地理/逆地理编码能实现地名查询经纬度和经纬度查地名。 实现高德API平台:https://lbs.amap.com/注册并登陆找到We......
  • python day 1
    #day1###解释器安装1.下载解释器5.添加环境变量环境变量:方便解释器运行###3.第一个脚本打开电脑终端win+r输入命令:解释器路径脚本路径(建议py后缀)###......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门翻译编程语言应用——官网推荐
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载......
  • Thrift中实现Java与Python的RPC互相调用
    在上面讲了在Java中使用Thrift实现远程过程调用。实现了在客户端调用服务端的方法。但是这都是在Java项目中。Thrift的强大之处并不止于此,如果想实现在两个不同的语言的服务......