这段代码是一个简单的小说爬虫,使用requests
库和re
模块来爬取小说章节内容。它通过获取章节目录,逐一下载章节内容并保存到本地的”小说.txt”文件中。
主要步骤如下:
- 创建一个名为
Spider
的类,其中包含初始化方法__init__
。 getcatalog
方法用于获取小说的章节目录,它发送GET请求获取页面内容,然后使用正则表达式提取章节链接和标题,将这些数据存储在self.data
列表中。parse
方法用于解析小说章节内容,也是通过发送GET请求获取页面内容,然后使用正则表达式提取章节文本。download
方法用于下载小说内容。它循环遍历self.data
中的章节链接,依次调用parse
方法解析并写入章节内容到文件中。同时,使用rich
库中的Progress
类来显示下载进度条。- 在主程序中,创建一个
Spider
对象,从而触发爬虫的运行。
请注意,这段代码只是一个简单的示例,实际爬虫可能会面临更多的挑战和问题,例如反爬措施、异常处理等。在进行网络爬取时,也需要遵循网站的规则和法律法规。
如果要把开头的猴子捂脸表情改成月亮,就把monkey改为moon!
import requests, re
from rich.progress import Progress
from rich.progress import BarColumn,Progress,SpinnerColumn,TaskProgressColumn,TimeElapsedColumn,TimeRemainingColumn,MofNCompleteColumn
class Spider:
url = "http://www.ibiquge.cc/83110"
baseurl = "http://www.ibiquge.cc"
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}
def __init__(self) -> None:
self.getcatalog()
self.download()
#获取章节目录
def getcatalog(self):
self.data = []
rsp = requests.get(self.url, headers=self.headers)
purl = '<dd><a href ="(.*?)">'
ptitle = '<dd><a href =".*?>(.*?)<'
for i, j in zip(re.findall(purl, rsp.text),re.findall(ptitle, rsp.text)):
self.data.append([j, self.baseurl+i])
#下载
def download(self):
with open('小说.txt', 'a') as f:
#设置进度条参数
with Progress(SpinnerColumn(spinner_name='monkey', speed=0.2),"{task.description}",BarColumn(),MofNCompleteColumn(),TaskProgressColumn(),
TimeElapsedColumn(),TimeRemainingColumn(),) as progress:
track = progress.add_task(total=len(self.data), description='downloading')
progress.update(track, advance=0) # 初始化进度条
for i in self.data:
f.write(i[0]+'\n')
txt = self.parse(i[1])
f.writelines(txt)
progress.update(track, advance=1,description='downloading')
#解析小说内容
def parse(self, url):
rsp = requests.get(url,headers=self.headers)
content = rsp.text
p = '> ([\s\S]*?)<'
txt = re.findall(p, rsp.text)
return txt #txt is list
Spider()
评论前必须登录!
注册