.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学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...
随机推荐
- html的body内标签之input系列2
一,input系列:name属性用于让后台拿数据.value 只是在屏幕上的显示. 1. input type='text' name='query' value="张三"(相当于 ...
- bzoj 1103: [POI2007]大都市meg (dfs序)
dfs序,加个bit维护前缀和就行了 type arr=record toward,next:longint; end; const maxn=; var edge:..maxn]of arr; bi ...
- Android <Android应用开发实战> 资源类型<一>
1.字符串资源>>1.普通字符串>>2.字符串数组 <resources> <string-array name="planets_array&qu ...
- UVALive.3708 Graveyard (思维题)
UVALive.3708 Graveyard (思维题) 题意分析 这标题真悲伤,墓地. 在周长为1e4的圆周上等距分布着n个雕塑,现在要加入进来m个雕塑,最终还要使得这n+m个雕塑等距,那么原来的n ...
- Python3简单入门
在Mac和Linux上运行Python时,请打开终端,然后运行python3 Mac OSX 正确地同时安装Python 2.7 和Python3: http://www.jianshu.com/p ...
- YBT 1.2 二分与三分
二分与三分: 二分(单调性),三分(单峰性),这章主要考数学,模拟,与读题!!! 链接: https://pan.baidu.com/s/1AJTl_0p5Lh4T1MmNwyJWzg 密码: j3j ...
- 将Visual Studio项目转换为Dot Net Core项目 csproj to xproj
删除csproj文件. 将 package.config 重命名为 project.json . 转换文件,将xml转换为json格式. <?xml version="1.0" ...
- 【简单算法】18.实现strStr()
题目: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存 ...
- snmp实用篇
简单网络管理协议(SNMP)是 TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于 SNMP的简单性,在Int ...
- BZOJ2434: [NOI2011]阿狸的打字机(AC自动机+dfs序+树状数组)
[NOI2011]阿狸的打字机 题目链接:https://www.luogu.org/problemnew/show/P2414 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. ...