qu.la网站上的小说爬取

本文分享了一个针对Qu.la网站的小说爬虫项目,介绍了如何使用Python和BeautifulSoup库抓取小说章节并保存为文本文件。项目虽早期且代码简陋,但展示了基本的爬虫技术和网页解析流程。

qu.la网站上的小说爬取

##这个项目是我最早开始写的爬虫项目,代码比较简陋

在写这个项目时,我还不会Python的协程编程,用协程可提升爬虫速度至少5倍,参考我的文章[线程,协程对比和Python爬虫实战说明]

(https://github.com/zhang0peter/python-coroutine)

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 22 11:04:57 2017
@author: zhang
"""


#小说第一面的网址
url="https://www.qu.la/book/26974/9765888.html"
#all1表示想要爬取多少面
all1=860
#path是你想要保存的文件名,可以是绝对路径
path = "超维术士.txt"




next=url.split('/')[-1]
url0 = url.replace(next,"")
from bs4 import BeautifulSoup
import requests
import time
time0=time.time()
header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36"}
a=""
i=0
def replace(content):
    content=content.replace("<br/>\u3000\u3000<br/>\u3000\u3000\xa0\xa0\xa0\xa0","\r\n")
    content=content.replace("[<div id=\"content\">\r\n\t\t\t\t\xa0\xa0\xa0\xa0","\r\n")
    content=content.replace("\t\t\t\t<script>chaptererror();</script>\n</div>]","")
    content=content.replace("<br/>\u3000\u3000","\r\n")
    content=content.replace("[<div id=\"content\">","\r\n")
    content=content.replace("\t\t\t\t<script>chaptererror();</script>\n</br></div>]","")
    return content
while 1:
    url=url0+next
    try :
        r=requests.get(url,timeout=10,headers=header)
    except:
        continue
    r.raise_for_status()
    if  not r.status_code ==200:
              print("产生异常1")
    r.encoding=r.apparent_encoding
    demo=r.text
    soup = BeautifulSoup(demo,"html.parser")
    title =str(soup.h1.string)
    a+=title
    content =str(soup.select("#content"))
    content=replace(content)
    a+=content
    try:
     next= soup.find('a','next').attrs['href']
    except:
        break
    i+=1
    time1=time.time()
    print("\r当前进度:  {0:.2f}% 总花费时间:{1:.2f}s".format(i*100/all1,time1-time0),end="")
    if i>=all1:
        break
print("\n共爬取了{0}章内容,花时{1:.2f}s".format(all1,time1-time0))
g=open(path,mode='w',encoding='utf-8')
g.write(a)
g.close()

code
GitHub项目地址:https://github.com/zhang0peter/novel-spider/
欢迎大家关注我的GitHub:https://github.com/zhang0peter

当运行 `svm_rfe <- rfe(features, response, sizes = c(1:10), rfeControl = control, method = &quot;svmRadial&quot;)` 出现所有 RMSE、Rsquared 和 MAE 指标值缺失以及错误信息 `Error in { : task 1 failed - &quot;Stopping&quot;` 时,可从以下几个方面排查解决: #### 数据问题 - **缺失值**:数据集中存在缺失值可能导致模型训练失败。可使用 `is.na()` 函数检查数据中是否存在缺失值,并使用 `na.omit()` 函数删除包含缺失值的行,或使用 `caret` 包中的 `preProcess()` 函数进行缺失值插补。 ```r # 检查缺失值 any(is.na(features)) any(is.na(response)) # 删除包含缺失值的行 features <- na.omit(features) response <- na.omit(response) # 或者使用 preProcess 进行缺失值插补 library(caret) preproc <- preProcess(features, method = c(&quot;knnImpute&quot;)) features <- predict(preproc, features) ``` - **数据类型**:确保响应变量 `response` 为合适的数据类型。对于分类问题,`response` 应为因子型;对于回归问题,`response` 应为数值型。 ```r # 若为分类问题 response <- as.factor(response) # 若为回归问题 response <- as.numeric(response) ``` #### 模型参数问题 - **核函数参数**:`svmRadial` 核函数有一些参数需要调整,如 `sigma` 和 `cost`。可使用 `tune.svm()` 函数进行参数调优。 ```r library(e1071) tune_result <- tune.svm(features, response, kernel = &quot;radial&quot;, cost = c(0.1, 1, 10), gamma = c(0.01, 0.1, 1)) best_cost <- tune_result$best.parameters$cost best_gamma <- tune_result$best.parameters$gamma # 在 rfe 中使用调优后的参数 control <- rfeControl(functions = caretFuncs, method = &quot;cv&quot;, number = 10) svm_rfe <- rfe(features, response, sizes = c(1:10), rfeControl = control, method = &quot;svmRadial&quot;, tuneGrid = data.frame(sigma = best_gamma, C = best_cost)) ``` - **交叉验证设置**:检查交叉验证的设置是否合理,如折数是否过大导致数据划分不均衡。可尝试调整交叉验证的折数。 ```r control <- rfeControl(functions = caretFuncs, method = &quot;cv&quot;, number = 5) # 调整为 5 折交叉验证 svm_rfe <- rfe(features, response, sizes = c(1:10), rfeControl = control, method = &quot;svmRadial&quot;) ``` #### 计算资源问题 - **内存不足**:若数据集较大,可能会导致内存不足。可尝试减少数据集的规模,或使用更高效的计算资源。 ```r # 随机抽取部分数据进行测试 sample_index <- sample(1:nrow(features), 0.5 * nrow(features)) features_sample <- features[sample_index, ] response_sample <- response[sample_index] svm_rfe <- rfe(features_sample, response_sample, sizes = c(1:10), rfeControl = control, method = &quot;svmRadial&quot;) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值