使用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版本.正好学习一 ...
随机推荐
- 垃圾wps弹出,现在连关闭按钮都不给了
垃圾wps弹出,现在连关闭按钮都不给了,有点起色就变得相当垃圾.
- 【Static Program Analysis - Chapter 4】格理论(Lattice Theory)与程序分析
# 从一个例子说起, **任务:给定这样一段代码,假设我们想分析出这段代码中,每个数值型变量和表达式的符号,即正数,负数或0.** 此外,还有可能出现两种情况就是: 1.我们无法分析出结果,即我们无法 ...
- Go VSCode配置编译task
菜单栏Tasks->Configure Tasks { "version": "2.0.0", "tasks": [ { " ...
- Java设计模式系列之装饰者模式
装饰者模式的定义 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案 装饰者模式的UML类图 一般来说装饰者模式有下面几个参与者: Component:装饰者和被装饰者共同 ...
- hibernate05--list和iterator
package cn.bdqn.test; import java.util.Iterator; import java.util.List; import org.hibernate.Query; ...
- swust oj 956
约瑟夫问题的实现 2000(ms) 65535(kb) 3266 / 10775 n个人围成一个圈,每个人分别标注为1.2.....n,要求从1号从1开始报数 ,报到k的人出圈,接着下一个人又从1开始 ...
- ping不通,配置dns
vim /etc/resolv.conf nameserver 119.29.29.29 nameserver 182.254.116.116 nameserver 8.8.8.8
- linux命令:压缩解压打包工具大集合
目录 (1)zip 压缩.解压缩及归档工具有很多,今天小编就整理几个大家较为常用的. compress gzip bzip2 xz zip tar cpio 一.压缩.解压工具 用法 压缩 工具 压 ...
- .net 问题
1.socket初始化三个步骤 2.多线程 3.mvc的理解
- Java ee第一周的作业
这学期目标:对Java ee 进行一定程度的学习,希望最后自己能尽可能掌握Java ee的知识 企业及应用的特点:企业级的应用通常比较庞大,而且其中的数据需要保密. Java ee 框架图