人生苦短,我用python。原来以为用Python抓本小说是小case,但做下来却发现不是所想的那样。
故事从某个人喜欢一本小说开始,头条新闻的大热,居然夹杂了许多小说,某人(真的是亲人!)喜欢某本小说,但头条里夹杂了诸多的广告,无法好好的看,或者要进入某个微信号然后交钱,很不爽。
话说Python那么牛,是不是可以抓下来?搜了几篇文章,好像不难,想想也是,小说不就是一堆文本而已(或者夹带HTML格式处理),但操作起来发现还是很多弯弯绕绕,把过程写下来,希望再有人做这件事时引以为鉴。
抓小说的过程,网上很多文章说的很清楚(可参考附件的文章)
现在既然要用了,就准备小试牛刀(这里是 唐峰林梦佳 的小说)。
首先百度了一下,找到文章的出处 https://m.biqiku.com/139/139648/all.html
格式好像也挺简单的,类似格式
第1章 重返地球
pattern = “
"苦逼之二:每个章节还分成几页(还好这个文章统一为3页,而且URL类似,偷懒就写成三段代码)
苦逼之三:以为大功告成,但运行之后,发现取了前几章后,后面跳过了好多章节,仔细看了文章,没发现前后章节格式有什么不同,好在灵机一动,每次读取网页内容后,将其打印出来。才发现是网站限制同一ip频繁访问,只能降低速度,每段章节加上time.sleep(3),基本解决这个问题。
爬小说是爬虫中比较简单的一种,但需要根据每篇进行分析定制,做完一篇感到兴趣索然,不知有无大神能写出通用的?
反正我是不想再写,原来还可以优化一下,每段文章通过下一页来找链接,不要被这种3页固定格式捆住,但意义不是很大,就放弃了。
rom urllib.request import urlopen
from requests.exceptions import RequestException
import re
from requests import get
import time
from lxml import etree
urlfirst ="https://m.biqiku.com/139/139648/all.html" #目录页 格式
response = get(urlfirst)
html = etree.HTML(response.text)
k = ""
pattern = ""
result = re.findall(pattern,response.text) #
for pp in result:
time.sleep(3) # 太频繁会被封IP
k += "\n"+pp[1]+"\n" # 标题
print(pp[1])
chapter = "https://m.biqiku.com"+pp[0]+".html"
print(chapter)
try:
response = get(chapter)
pattern = " (.*?)第"
result = re.findall(pattern,response.text) # 获得每章数据.第一页 ;
for r in result:
r = r.replace(" "," ")
r = r.replace("
","\n")
k += r
except RequestException as e:
print(e)
chapter = "https://m.biqiku.com"+pp[0]+"_2.html"
print(chapter)
try:
response = get(chapter)
pattern = " (.*?)
第"
result = re.findall(pattern,response.text) # 获得每章数据.第二页 ;
for r in result:
r = r.replace(" "," ")
r = r.replace("
","\n")
k += r
except RequestException as e:
print(e)
chapter = "https://m.biqiku.com"+pp[0]+"_3.html"
print(chapter)
try:
response = get(chapter)
pattern = " (.*?)
第"
result = re.findall(pattern,response.text) # 获得每章数据.第三页 ;
for r in result:
r = r.replace(" "," ")
r = r.replace("
","\n")
k += r
except RequestException as e:
print(e)
with open("唐峰林梦佳.txt","w+",encoding="utf8")as f:
f.write(k)
参考文章:
Python爬虫实战–爬取网络小说并存放至txt文件
https://blog.csdn.net/xjm850552586/article/details/78585286