.net爬虫了解一下
using System;
//添加selenium的引用
using OpenQA.Selenium.PhantomJS;
using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net;
using HtmlAgilityPack;
namespace ConsoleApplication1
{
class requests
{ public static string UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"; public static string AcceptLang = "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"; public static bool AddProxy = false; public static bool ProxyPort = false;
public static string ProxyHost = null;
private static string Status;
private static string ResponseUri;
private static HtmlDocument Document=new HtmlDocument(); static PhantomJSDriver driver { get; set; } static void Main(string[] args)
{
//PhantomJSDriverService driverService = PhantomJSDriverService.CreateDefaultService();
////driverService.IgnoreSslErrors = true; //"any" also works
//driverService.HideCommandPromptWindow = true;
//driverService.ProxyType = "none";
//driverService.SslProtocol = "any";
//driverService.MaxDiskCacheSize = 1000;
//driverService.DiskCache = true;
//driverService.WebSecurity = false;
//PhantomJSOptions phs = new PhantomJSOptions();
//phs.AddAdditionalCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36");
var req = get(new Uri("http://www.baidu.com"));
var resp = response(req);
var root = GetResult(resp);
var nodelist=parse(root,"//div");
Console.WriteLine(root.DocumentNode.InnerHtml);
ChromeOptions options = new ChromeOptions();
options.AddArgument("--headless");
options.AddArgument("--nogpu");
List<String> tagNmaeList = new List<string>(); ;
//using (driver = new PhantomJSDriver(driverService, phs))
//{
using (var driver = new ChromeDriver(options))
{
driver.Manage().Window.Maximize();
driver.Navigate().GoToUrl(@"https://qiita.com/ttake/items/2e470462f8d90e76e996");
Thread.Sleep(5000);
string source = driver.PageSource;
Console.WriteLine(driver.Url);
var html = driver.FindElement(By.TagName("html"));
try
{
var div = driver.FindElement(By.Id("global-nav")); }
catch (NoSuchElementException)
{
Console.WriteLine("找不到该元素"); ;
}
IJavaScriptExecutor js = (IJavaScriptExecutor)driver; var divnode = driver.FindElement(By.ClassName("highlight")); var bkgimg = js.ExecuteScript("arguments[0].style.getPropertyValue('background-image')", divnode);
if (bkgimg == null)
{
var outerhtml = divnode.GetAttribute("outerHTML"); //outerhtml
var outerText = divnode.GetAttribute("outerText");
var innerText = divnode.GetAttribute("innerText");
var children = divnode.GetAttribute("children");
var textContent = divnode.GetAttribute("textContent");
var childElementCount = divnode.GetAttribute("childElementCount");
} var image = driver.FindElement(By.ClassName("it-Header_authorImage")); var width = image.Size.Width;
var height = image.Size.Height;
var elem = js.ExecuteScript("return document.defaultView.getComputedStyle(arguments[0])", image); Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
var dirpath = @"D:\temp";
if (!Directory.Exists(dirpath))
{ Directory.CreateDirectory(dirpath); }
screenshot.SaveAsFile(@"D:\temp\seleniumScreenshot.png", ScreenshotImageFormat.Png);
}
}
private static HttpWebRequest get(Uri uri)
{
HttpWebRequest httpWebRequest = WebRequest.Create(uri) as HttpWebRequest; if (httpWebRequest != null)
{
httpWebRequest.AllowAutoRedirect = true;
httpWebRequest.AutomaticDecompression = (DecompressionMethods.GZip | DecompressionMethods.Deflate);
httpWebRequest.UserAgent = UserAgent;
if (!string.IsNullOrEmpty(AcceptLang))
{
httpWebRequest.Headers.Add("Accept-Language", AcceptLang);
}
if (AddProxy)
{
WebProxy proxy = new WebProxy(ProxyHost, ProxyPort);
httpWebRequest.Proxy = proxy;
}
}
return httpWebRequest;
}
private static HttpWebResponse response(WebRequest request)
{
return (HttpWebResponse)request.GetResponse();
}
private static HtmlDocument GetResult(HttpWebResponse response)
{
if (response != null)
{
Status = response.StatusCode.ToString().ToUpper();
ResponseUri = response.ResponseUri.AbsoluteUri;
using (Stream responseStream = response.GetResponseStream())
{
byte[] array = new byte[1024];
using (MemoryStream memoryStream = new MemoryStream())
{
int num;
do
{
num = responseStream.Read(array, 0, array.Length);
if (num > 0)
{
memoryStream.Write(array, 0, num);
}
}
while (num > 0);
memoryStream.Seek(0L, SeekOrigin.Begin);
Document.Load(memoryStream,Encoding.UTF8);
}
}
}
return Document;
}
private static HtmlNodeCollection parse(HtmlDocument doc,string xpath)
{ var nodelist=doc.DocumentNode.SelectNodes(xpath);
return nodelist; } } }
.net爬虫了解一下的更多相关文章
- 设计爬虫Hawk背后的故事
本文写于圣诞节北京下午慵懒的午后.本文偏技术向,不过应该大部分人能看懂. 五年之痒 2016年,能记入个人年终总结的事情没几件,其中一个便是开源了Hawk.我花不少时间优化和推广它,得到的评价还算比较 ...
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- scrapy 知乎用户信息爬虫
zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...
- 120项改进:开源超级爬虫Hawk 2.0 重磅发布!
沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...
- Python爬虫小白入门(四)PhatomJS+Selenium第一篇
一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...
- Python多线程爬虫爬取电影天堂资源
最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...
- QQ空间动态爬虫
作者:虚静 链接:https://zhuanlan.zhihu.com/p/24656161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说明几件事: 题目的意 ...
- 让你从零开始学会写爬虫的5个教程(Python)
写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...
随机推荐
- BZOJ4771 七彩树(dfs序+树上差分+主席树)
考虑没有深度限制怎么做.显然的做法是直接转成dfs序上主席树,但如果拓展到二维变成矩形数颜色数肯定没法做到一个log. 另一种做法是利用树上差分.对于同种颜色的点,在每个点处+1,dfs序相邻点的lc ...
- 《高性能MySQL》 读书总结
目录: 第一章.MySQL架构与历史 第二章.MySQL基准测试 第三章.服务器性能剖析 第四章.Schema与数据类型优化 第五章.创建高性能的索引 第六章.查询性能优化 第七章.MySQL高级特性 ...
- [NOIP2015 TG D2T3]运输计划
题目大意: 给你一棵n个节点的树,有边权,有多个任务,每个要求从ui号节点到 vi号节点去.m 个计划, 这 m 个计划会同时开始.当这 m 个任务都完成时,工作完成. 现在可以把任意一个边的边权变为 ...
- 剑桥offer(11~20)
11.题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. class Solution { public: int NumberOf1(int n) { ; unsigned ...
- Ubuntu 14.04 64bit下Caffe + Cuda6.5/Cuda7.0 安装配置教程
http://www.embeddedlinux.org.cn/emb-linux/entry-level/201612/21-6005.html 随着深度学习快速发展的浪潮,许多有兴趣的工作者都转入 ...
- STL之二:vector容器用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8507394 vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组. ...
- mapper中的CDATA标签的用法
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data). 在 XML 元素中,"<" 和 "&& ...
- Moodle插件开发——Blocks(版块)
前提: 1) 基于Moodle3.0,要求Moodle版本高于2.0 2) PHP编程基础:语言的了解和开发工具使用 有经验的开发人员和那些只是想程序员的参考文本应参阅附录A. 1. ...
- 利用枚举算法实现todoList:把对应项添加的内容列表
功能: 点击城市列表项,如果内容列表不存在,则插入点击项: 如果内容列表中已存在,则不插入,然后把内容列表中的对应项放到第一位. HTML代码: <!DOCTYPE html> <h ...
- 获得WebApi用Post方法获得新增数据的信息
首先,要知道webApi的基本返回方式是HttpResponseMessage,post会在响应中返回添加的对象,以及添加对象的访问地址 如:在fiddler里测试的时候 然后,我们可以根据这一点在后 ...