爬虫实战(一)爬取新笔趣阁小说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' ') ###匹配空格
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:就可以了。
脚本我传到百度网盘了公众号回复”笔趣阁爬虫“获取链接
作者:那酒不要留
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!知识源于分享!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!