xml地图|网站地图|网站标签 [设为首页] [加入收藏]
爬虫学习笔记,自兴人工智能
分类:编程

一.类自动属性

       最近因为一个作业需要完成CNKI爬虫,研究爬虫架构的时候发现了这个疑似移植于Python的著名开源爬虫框架Scrapy的ScrapySharp,然而在网上寻找之后只发现了这个F#的Demo,就使用原文中示例的网站写了这个C#版本的代码。

       PS:研究之后发现,ScrapySharp和Scrapy差距还是挺大的,没有Scrapy那样完善的八大组件,只含有获取网页内容和基于HtmlAgilityPack扩展的网页解析功能,莫名有些小失望。

using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using HtmlAgilityPack;
using ScrapySharp.Extensions;
using ScrapySharp.Network;


namespace ScrapySharpDemo { class Program { static void Main(string[] args) { //示例网站地址 var url = ""; var web = new ScrapingBrowser(); var html = web.DownloadString(new Uri(url)); var doc = new HtmlDocument(); doc.LoadHtml(html); //获取网站中的图片地址 var urls= doc.DocumentNode.CssSelect("div.bbs-content > img").Select(node => node.GetAttributeValue("original")).ToList(); //并行下载图片 Parallel.ForEach(urls, SavePic); }
public static void SavePic(string url) { var web = new ScrapingBrowser(); //因天涯网站限制,所有站外来源都无法访问图片,故先设置请求头Refer属性为当前页地址 web.Headers.Add("Referer", ""); var pic = web.NavigateToPage(new Uri(url)).RawResponse.Body; var file = url.Substring(url.LastIndexOf("/", StringComparison.Ordinal)); if (!Directory.Exists("imgs")) Directory.CreateDirectory("imgs"); File.WriteAllBytes("imgs" + file, pic); } } }

如何建立一个元组:

图片 1图片 2

元组用小括号包裹,并且括号里的元素用逗号分隔就代表这是一个元组。

  1 public class Person
  2     {
  3         //自动属性
  4        public string Name { get; set; }
  5 
  6         private int _age;
  7 
  8         public int age {
  9             get { return _age; }
 10             set { _age = value; }
 11         }
 12     }

元组与列表不同的是元组里面的元素不能修改。

View Code

a=(1,2,3)

Name为类的自动属性,其实跟下面age的定义方法是一样的,只不过是微软自动帮你生成了字段。

元组常用操作:

二.隐式类型

tuple函数:以一个序列作为参数,并把它转换为元组

图片 3图片 4

a=[1,2,3]#列表
c=tuple(a)
print(c)
#(1,2,3) 结果
  1         static void Var()
  2         {
  3             var person = new Person();
  4 
  5             var p = person;
  6         }

访问元组:可以使用下标索引访问元组中的值

View Code

a=(1,2,3,4,5,6)
print(a[4])
5 #结果

1.var类型会被编译器根据初始值的类型自动推断出具体的类型。

连接元组:元组中的元素值不允许修改,但可以对元组进行连接组合

  1. var类型不能做参数。
a=('md','fk')
b=(1,2)
c=a+b
print(c)
('md','fk',1,2)#结果

3.无法将null赋值给var类型。

删除元组:元组中的值不允许单个删除,但可以使用del语句删除整个元组

4.语句中只声明一次变量,声明后不能更改类型。

a=(1,2,3)
del a
print(a)
#结果报错

三、匿名类

元组截取:利用索引截取元组中某一段的值

图片 5图片 6

a=(1,2,3,4,5,6)
print(a[2:5])#从索引2开始截取(包括索引2上的值)到索引5结束(不截取索引5上的值)
(3, 4, 5)#结果
  1         static void W02AnmClass()
  2         {
  3             var d = new { name = "张三", age = 13 };
  4             var d2 = new { name = 12, age = "13" };
  5             var d3 = new { name = "张三", age = "13", gender="男"};
  6         }

 

View Code

1.匿名类本质上是编译器生成的一个泛型类。

2.当匿名类的参数个数一样的时候是共用一个泛型类。

3.当匿名类的参数个数不一样的时候是各自生成不同的泛型类。

4.匿名类初始化的时候一定要赋值。

四、默认值和命名参数

本文由澳门新葡亰手机版发布于编程,转载请注明出处:爬虫学习笔记,自兴人工智能

上一篇:没有了 下一篇:PHP之外观模式,reactor加密源码保软件安全
猜你喜欢
热门排行
精彩图文