使用C#爬小说
最近因朋友需要在研究如何从网站上爬小说,说到爬,很多人首先想到的是Python,但是因为没有用过Python,加上时程比较紧,就直接使用C#。
其原理也很简单,就是利用HttpWebRequest对象从网站获取HTML数据包再解析
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(httpURL);
httpReq.Method = "GET";
httpReq.ContentType = "text/html;charset=utf-8"; HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse(); HttpWebRequest htt
实际操作过程中发现有些问题,特意记录下
1、返回的HTML数据包是乱码,这个问题有两种解法,首先是要确保StreamReader的编码格式与网站URL的一致,如下
respStreamReader = new StreamReader(respStream, Encoding.UTF8);
另外就是要看服务器传回的流是否使用了gzip方法压缩,如果用了gzip方法压缩,则要用解压才行
string header = httpResp.GetResponseHeader("Content-Encoding");
StreamReader respStreamReader;
if (header == "gzip")
{
respStreamReader = new StreamReader(new GZipStream(respStream, CompressionMode.Decompress), Encoding.UTF8);
}
2、有些网站可能是为了防止别人下载内容,做了一些限制,比如不允许连续的下载,因此可以在下载一章之后暂停1000毫秒再执行。
var t = DateTime.Now.AddMilliseconds(seconds);
while (DateTime.Now < t)
Application.DoEvents();
3、HttpWebRequest的GetResponse或GetRequestStream偶尔超时,设置System.Net.ServicePointManager.DefaultConnectionLimit = 50;具体参照链接
4、部分网站故意打乱各章节的顺序 ,如https://www.aixs.org/xs/69/69337/,你下载下来的html文件各章节完全是乱的,但是在网站上显示却是正常的,原因是网站在运行时执行了特定的js重新更新章节顺序,这一招防下载也挺厉害,不过也不是没有解。
js代码如下
<script type="text/javascript">
var odiv=document.getElementById('listsss')
var aDiv=odiv.getElementsByTagName('div')
//var aDiv = document.getElementsByTagName('p');
var arr = [];
for(var i=0;i<aDiv.length;i++)
{
arr.push(aDiv[i]);
}
arr.sort(function(a,b){return a.getAttribute('data-id') - b.getAttribute('data-id')});
for(var i=0;i<arr.length;i++)
{
odiv.appendChild(arr[i]);
} var flag = true;
function daoxu() {
if (flag) {
document.getElementById("xianshi").innerHTML = '正序显示';
flag = false;
} else {
document.getElementById("xianshi").innerHTML = '倒序显示';
flag = true;
} if(!arrs){
var arrs = document.querySelectorAll("#chapter");
}
for (var i = arrs.length - 1; i > -1; i--) {
document.querySelector("#listsss").appendChild(arrs[i]);
}
}
</script>
使用C#爬小说的更多相关文章
- Python爬虫-爬小说
用途 用来爬小说网站的小说默认是这本御天邪神,虽然我并没有看小说,但是丝毫不妨碍我用爬虫来爬小说啊. 如果下载不到txt,那不如自己把txt爬下来好了. 功能 将小说取回,去除HTML标签 记录已爬过 ...
- python爬虫爬小说网站涉及到(js加密,CSS加密)
我是对于xxxx小说网进行爬取只讲思路不展示代码请见谅 一.涉及到的反爬 js加密 css加密 请求头中的User-Agent以及 cookie 二.思路 1.对于js加密 对于有js加密信息,我们一 ...
- 一个用来爬小说的简单的Node.js爬虫
小说就准备点天下霸唱和南派三叔的系列,本人喜欢看,而且数据也好爬.貌似因为树大招风的原因,这两作者的的书被盗版的很多,乱改的也多.然后作者就直接在网上开放免费阅读了,还提供了官网,猜想作者应该是允许爬 ...
- 使用beautifulsoup和pyquery爬小说
# -*- coding:UTF-8 -*- from bs4 import BeautifulSoup #BeautifulSoup就是处理字符串的工具 import requests, sys & ...
- Java爬虫框架 | 爬小说
Jsoup,Java爬虫解决方案,中文文档:jsoup 不得不说Java的生态真的好,原来我以为爬虫是只能用Pyhton来写的,结果发现Java的爬虫框架不要太多…… 一分钟你就可以写 ...
- 《学习scrapy框架爬小说》的进一步完善
一.完善目标: 1.为方便使用,把小说拼音或英文名,小说输出中文名,第一章节url地址变量化,修改这些参数即可爬取不同的小说. 2.修改settings.py设置文件,配置为记录debug的log信息 ...
- 学习scrapy框架爬小说
一.背景:近期学习python爬虫技术,感觉挺有趣.由于手动自制爬虫感觉效率低,了解到爬虫界有先进的工具可用,尝试学学scrapy爬虫框架的使用. 二.环境:centos7,python3.7,scr ...
- 学习使用re做解析器爬小说
一.背景:近期学习python爬虫中看到,在对网页内容进行解析的技术中,re正则表达式工具也是一个很好的工具,使用re编制爬虫工具正好熟悉re正则表达式的使用. 二.环境及爬取目标 1.linux c ...
- 学习使用pyquery解析器爬小说
一.背景:个人喜欢在网上看小说,但是,在浏览器中阅读小说不是很方便,喜欢找到小说的txt版下载到手机上阅读,但是有些小说不太好找txt版本,考虑自己从网页上爬一爬,自己搞定小说的txt版本.正好学习一 ...
随机推荐
- SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)
SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...
- 完美:利用旧版iCloud更改Apple ID地区
朋友们,你们有没有尝试过从大陆地区以外的App Store上下载APP呢?或许听起来蛮有趣的,其实并不难,只需要更改Apple ID的地区就可以了,许多用户就是卡在下一步,需要输入付款信息,不过下面苹 ...
- 禅道迁移(windows_to_linux)
需求分析 随着禅道数据的增加,原来通过虚拟机提供的mysql服务器相应速度跟不上需求.且原来禅道的前端与数据库分离安装在windows与linux中,现在提供实体服务器,需要将禅道环境迁移. 确认环境 ...
- Solve Error: Library not loaded: @rpath/RoutingHTTPServer.framework/RoutingHTTPServer
在配置WebDriverAgent的时候,可能会遇到如下的错误: 2018-01-04 09:53:42.759370-0600 WebDriverAgentRunner-Runner[318:133 ...
- HTML <script> 标签的 defer 和 async 属性
HTMKL <script>标签中有defer和async属性,简单介绍一下两者的区别吧. 普通的script标签会让浏览器立即下载并执行完毕,执行也是按照先后顺序,再进行后面的解析. ...
- eclipse中的快捷键的使用
- 注意兼容浮点运算误差 0.7 + 0.1 ==0.8 为false
所以比较 汇总或者计算的时候注意确定精度0.7 + 0.1 ==0.8 换成 Math.abs(0.7 + 0.1 ==0.8)<0.0001参考下
- [No0000197]Windows用户都应该知道的运行命令
通过"运行"命令,运行Windows丰富工具的方法.如果您知道工具或任务的相应"运行"命令,那么您就知道访问所述工具或任务的最快方法. 以下是我们最喜欢的Run ...
- Cesium 实践
详细内容请参考教程:https://www.jianshu.com/p/31c3b55a21eb 该教程翻译自官方英文教程,对入门cesium 帮助很大. 2,Cesium项目实例 实践: 问题 ...
- Java加载dll或so库文件的路径 java.library.path
1. Java的System.load 和 System.loadLibrary都可以用来加载库文件 2.例如你可以这样载入一个windows平台下JNI库文件: System.load(&q ...