爬虫实战(一)爬取新笔趣阁小说2.0

之前写的笔趣阁爬虫1.0还没有实现下载功能,今天又补充了很多东西。
不过还有不少问题。大佬们可以提提建议。

在昨天的基础上增加了以下内容:

一、###获取小说简介

ddef get_jianjie():
    pattern_description=re.compile(r'description"\scontent="(.*)"/>')
    resp_description=pattern_description.findall(resp2)
    resp_description=''.join(resp_description)
    pattern_author=re.compile(r"author\"\scontent=\"\w+")     #匹配小说作者
    resp_author=pattern_author.findall(resp2)
    resp_author=''.join(resp_author)
    resp_author=re.sub(r"content=",' ',resp_author)
    resp_author=re.sub(r'[^\u4e00-\u9fa5]+', '',resp_author)  ###匹配作者并替换所有非中文符号
    author = "作者:"+ resp_author
    #print(resp_description)
    #print(resp_author)
    with open('./{0}.txt'.format(book_name),"a+",encoding='utf-8') as f:
        print("正在写入小说作者与简介...")
        print(f.write(book_name))
        print(f.write('\n'))
        print(f.write(author))
        print(f.write('\n'))
        print(f.write(resp_description))
        print(f.write('\n'))          ###回车换行很重要
        print(f.write('\n'))
        f.close()
​
​

​二、增加写入文件,并创建以书名命名的xxx.txt

#############爬取小说内容方法########################
def get_book_text(end_url):
    test_url=end_url   ##url
    test_resp=requests.get(test_url)
    test_resp.encoding='utf-8'
    test_resp=test_resp.text
    xxxx=test_resp
    #print(test_resp)############匹配小说正文###################
    pattern3=re.compile(r'<div id="content">(.*)</div>')
    text1=pattern3.findall(test_resp)
    #print(text1)
    text1=''.join(text1)             #列表转字符串
    pattern4=re.compile(r'<br />')    ##匹配回车
    text2_rm_br=pattern4.sub( '\n',text1)###########替换回车
    #print(text2_rm_br)
    pattern5=re.compile(r'&nbsp;')   ###匹配空格
    text3_rm_nbsp_br=pattern5.sub(' ',text2_rm_br)                  ####替换空格
    #print('正文开始:',text3_rm_nbsp_br)   ###正文内容
    with open('./{0}.txt'.format(book_name),"a+",encoding='utf-8') as f:
        print("正在写入小说内容")
        print(f.write(text3_rm_nbsp_br))
        print(f.write('\n'))
        print(f.write('\n'))
        f.close()
# end_url='http://www.xbiquge.la/0/951/827335.html'
# get_book_text(end_url)
​
​
​
​
############匹配文章标题方法###########################3
def get_chapters_name(end_url):
    test_url1=end_url   ##url
    test_resp1=requests.get(test_url1)
    test_resp1.encoding='utf-8'
    test_resp1=test_resp1.text
    #print(test_resp1)
​
    pattern_chapter_name=re.compile(r'<h1>(.*)</h1>')   ##章节名称正则1
    chapter_name=pattern_chapter_name.findall(test_resp1)
    chapter_name=''.join(chapter_name)
    #print(chapter_name)  ###最终chapter_name
    with open('./{0}.txt'.format(book_name),"a+",encoding='utf-8') as f:
        print("正在写入:",chapter_name)
        print(f.write(chapter_name))
        print(f.write('\n'))
        f.close()

**PS:**这里需要注意的是:open函数我这里用的a+不然在for循环中每次写入都会覆盖旧的内容​。

​  文本模式 (默认)。
x  写模式,新建一个文件,如果该文件已存在则会报错。
b  二进制模式。
+  打开一个文件进行更新(可读可写)。
U  通用换行模式(Python 3 不支持)。
r  以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb  以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+  打开一个文件用于读写。文件指针将会放在文件的开头。
rb+  以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w  打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb  以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+  打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+  以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a  打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

增加了输入​:

book_name=input("请输入要爬取的小说名称:")



效果如下:

请输入要爬取的小说名称:万古神帝
您要要爬取的小说是: 万古神帝
https://www.xsbiquge.com/search.php?keyword=万古神帝
请求状态: 200
网页编码方式 utf-8
获取到小说地址: https://www.xsbiquge.com/20_20331/
正在写入小说作者与简介...
4
1
6
1
271
1
1
正在写入: 第1章 八百年后
8
1
正在写入小说内容
4271
1
1
正在写入: 第2章 开启神武印记
10
1
正在写入小说内容
3673
1
1
正在写入: 第3章 黄极境
7
1
正在写入小说内容
3879
1
1
​
Process finished with exit code -1

在这里插入图片描述

遗留问题:

还有很多功能没有完善,后续还会继续更新和优化,当前的问题如下:
1、只能爬取小说名默认匹配的第一本小说。(这个需要在获取小说地址的时候遍历所有匹配到的小说,然后获取链接并让用户input输入选择要爬取的)
2、异常抛出没写,很简单 加个try:就可以了。
脚本我传到百度网盘了公众号回复”笔趣阁爬虫“获取链接

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值