C#中之公文流学习笔记第一首

(1) 首先新建一个控制台应用程序,起名随便,然后写副如下代码:

其实安装还是异常简单的,我们可以直接pip install scrapy

            string path = @”c:\HYL\CS\File\Exise.avi”;

Twisted安装:

下载http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

接下来安装

                                 int count=0;

Scrapy-1.4.0-py2.py3-none-any.whl
(md5)进行设置,安装报错,需要去下载提示的库,

(1) Read(存放数据的byte数组,从数组的首先号位置上马放多少,取出多少多少)

 

  1. Path

安装PyWin32

打官方网站下载对许版本的装包即可,链接为:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/

产图显示了Scrapy的约架构,

图片 1

 

            1)语法实现

二、组件

1、Scrapy Engine(Scrapy引擎)

Scrapy引擎是因此来支配总体体系的数处理流程,并展开事务处理的触及。更多的详实内容可以看下面的数额处理流程。

2、Scheduler(调度)

调度程序于Scrapy引擎接受请求并排序列入队列,并以Scrapy引擎发出请求后返还给他们。

3、Downloader(下载器)

下载器的主要职责是抓取网页并以网页内容返还给蜘蛛( Spiders)。

4、Spiders(蜘蛛)

蜘蛛是生Scrapy用户自己定义用来分析网页并抓取制定URL返回的情的接近,每个蜘蛛都能处理一个域名还是一致组域名。换句话说就是是因此来定义特定网站的抓取和分析规则。

蜘蛛的普抓取流程(周期)是这样的:

率先得到第一独URL的上马请求,当呼吁返回后调整取一个回调函数。第一单请求是透过调用start_requests()方法。该方法默认从start_urls中之Url中变化请求,并履行解析来调用回调函数。

在回调函数中,你得分析网页响应并返路对象与伸手对象要双方的迭代。这些请求也拿富含一个回调,然后给Scrapy下载,然后发指定的回调处理。

当回调函数中,你分析网站的始末,同程使用的是Xpath选择器(但是你为堪行使BeautifuSoup,
lxml或其他任何你喜欢的程序),并生成解析的数码项。

最终,从蜘蛛返回的项目一般会进驻到花色管道。

5、Item Pipeline(项目管道)

品种管道的首要责任是背负处理发生蜘蛛从网页中抽取的种类,他的机要任务是鲜明、验证和储存数据。当页面被蜘蛛解析后,将吃发送到花色管道,并经几个特定的先后处理数据。每个类别管道的机件都是出一个简约的计结合的Python类。他们得到了种并履行他们之艺术,同时他们还需要规定的凡是否要以档次管道中继续执行下一致步或是直接扔弃丢不处理。

种管道通常执行的经过发生:

清洗HTML数据
证解析及之多寡(检查项目是否带有必要之字段)
自我批评是否是再次数据(如果再就去)
用分析及的数目存储到数据库被

6、Downloader middlewares(下载器中间件)

下载中间件是坐落Scrapy引擎和下载器之间的钩子框架,主要是拍卖Scrapy引擎与下载器之间的乞求与响应。它提供了一个自定义的代码的法子来开展Scrapy的功能。下载中间器是一个拍卖要和响应的钩框架。他是轻量级的,对Scrapy尽享全局控制的最底层的体系。

7、Spider middlewares(蜘蛛中间件)

蜘蛛中间件是在于Scrapy引擎和蜘蛛之间的钩框架,主要办事是处理蜘蛛的响应输入和要输出。它提供一个自定义代码的方式来进行Scrapy的机能。蛛中间件是一个挂接到Scrapy的蜘蛛处理机制的框架,你可插入于定义之代码来拍卖发送给蜘蛛的伸手与归蜘蛛获取之应内容与种。

8、Scheduler middlewares(调度中间件)

调度中间件是在乎Scrapy引擎和调度之间的中游件,主要办事是居于起Scrapy引擎发送到调度的伸手和应。他供了一个自定义的代码来拓展Scrapy的效益。

我们安后得以去立一个工,我打名叫做baidu

scrapy startproject baidu

目结构

scrapy.cfg: 项目的配置文件

tutorial/: 该项目的python模块。之后您将在此加入代码。

tutorial/items.py: 项目中的item文件.

tutorial/pipelines.py: 项目中的pipelines文件.

tutorial/settings.py: 项目的设置文件.

tutorial/spiders/: 放置spider代码的目录.

那么开始一个爬虫

我们去分析下这个网站 https://movie.douban.com/top250


我们可以看到,界面所有的都是在ol的标签下,元素的class也是唯一的, 那么我们可以定位到这里,去找到所有的电影的一个集合
xptach是//ol[@class="grid_view"]/li
那么我们来分析下下面的电影

 

 

我们可以看到 我们想要获取的元素是很简单的,都是好获取的元素,
那么我们来顶一下我们要获取的,我们在item.py来定义
    ranking=scrapy.Field() 
    movie_name=scrapy.Field() #电影名称
    score=scrapy.Field()  #分数
    score_num=scrapy.Field()#评分人数
    daoyan=scrapy.Field()#导演,演员
    bieming=scrapy.Field()
    url=scrapy.Field()#url地址
几乎我们可以看到我们想要的元素都可以得到,
那么我们来组织我们的代码

from baidu.items import BaiduItem
from scrapy import Request
import re
class XiaoHuarSpider(scrapy.Spider):
    name = 'douban_movie_top250'
    start_urls=[
         'https://movie.douban.com/top250']

    def parse(self, response):
        item = BaiduItem()
        movies = response.xpath('//ol[@class="grid_view"]/li')
        for movie in movies:
            item['ranking'] = movie.xpath('.//div[@class="pic"]/em/text()').extract()[0]
            item['movie_name'] = movie.xpath('.//div[@class="hd"]/a/span[1]/text()').extract()[0]
            item['score'] = movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').extract()[0]
            item['score_num'] = movie.xpath('.//div[@class="star"]/span/text()').re('(\d+)人评价')[0]
            item['daoyan']=movie.xpath('.//div[@class="bd"]/p/text()').extract()[0]
            item['bieming']=movie.xpath('.//div[@class="bd"]/p[@class="quote"]/span/text()').extract()[0]
            item['url']=movie.xpath('.//div[@class="hd"]/a/@href').extract()[0]
            yield item

 

我们来在命令行来跑下我们的代码

scrapy crawl douban_movie_top250 –logfile=test.log
-o
douban_movie_top250.json
-t
json

图片 2

俺们可见见是绝非得到到多少了,只发生log日志

翻阅资料发现有人说着可能是被禁止了,那么我们来修改修改,伪造下
加个headers吧

class XiaoHuarSpider(scrapy.Spider):
    name = 'douban_movie_top250'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',}
    def start_requests(self):
        url = 'https://movie.douban.com/top250'
        yield Request(url, headers=self.headers)
    def parse(self, response):
        item = BaiduItem()
        movies = response.xpath('//ol[@class="grid_view"]/li')
        for movie in movies:
            item['ranking'] = movie.xpath('.//div[@class="pic"]/em/text()').extract()[0]
            item['movie_name'] = movie.xpath('.//div[@class="hd"]/a/span[1]/text()').extract()[0]
            item['score'] = movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').extract()[0]
            item['score_num'] = movie.xpath('.//div[@class="star"]/span/text()').re('(\d+)人评价')[0]
            item['daoyan']=movie.xpath('.//div[@class="bd"]/p/text()').extract()
            item['bieming']=movie.xpath('.//div[@class="bd"]/p[@class="quote"]/span/text()').extract()[0]
            item['url']=movie.xpath('.//div[@class="hd"]/a/@href').extract()[0]
            yield item

那么我们再度来运行下我们的代码

看下我们的douba.csv

图片 3

 

每当来探望我们的日记模块:

图片 4

 

 我们的日记也得健康的打印了,那么我们来探,我们的多少似乎少好多,只有首先页的,那么我们去分析下我们的页面

图片 5

 

似乎我们明白了什么
那么,我们来改进下我们的代码。
增加下面代码

next_url=response.xpath('//span[@class="next"]/a/@href').extract()
        if next_url:
            next_url='https://movie.douban.com/top250'+next_url[0]
            yield Request(next_url,headers=self.headers)

 那么我们又来爬取下我们的爬虫

图片 6

单单看咱们今天的数据文件大小,我们是打响的,那么我们来拘禁下我们中的情

图片 7

 

日记文件显示了成百上千事先并未爬取到的文章

图片 8

 

爬虫其实也从没那么复杂,只要你当途中坚持了。

 

  1. Read和Write的使用

自我是一个大专生,也是一个口发奋到今日。

 

 

                   {

另外自供vip指导,python自动化,python学习方面,python做测试出方面,我都见面供指导,vip终身有效,现价1500,联系qq:952943386,稍后会更新qq群,喜欢的心上人可来,本人为是由一个未知晓吗是python到本亦可举行东西,从15的2k到17之10k+都是辛酸泪,可以同大家齐共勉,提供思路,能够为您运动之重新远,我吗是自白纸一张一步步走来,如果您是初毕业的生是呢抱你,可以为您点,但是自能举行的便是带来你,但是本人未是培训班,没有供就业的空子,我只见面以产生机会的时节被你推荐,学无止境,此时也许本身只好让您有的测试,提供职业指导,我可能以后会带动被您再次多。

  1. FileStream(文件流),专门用文件为字节约流的款式进行拍卖

http://scrapy-chs.readthedocs.io/zh\_CN/0.24/intro/tutorial.html
入门教程

(2)一般情形使用的时候 Read(数组名,0,数组名.Length);

倘报错也堪去下载https://pypi.python.org/pypi/Scrapy

    图片 9

 爬虫,其实挺已经发出提到到这个点,但是一直没有深入,今天来干爬虫。选择了,scrapy这个框架

            string full = Path.GetFullPath(“1.txt”);

 

(2)然后运行程序,找到Debug文件夹下面的exe文件,复制一个备份,起名为hylcopy.exe

(4)得到全路径 GetFullPath

(5)得到后缀名 GetExtension

     (2)使用文件流,无非就是是读取和描绘副文件

static void Main(string[] args)

{

            using (FileStream fileWriter = new FileStream("file.txt", FileMode.Create, FileAccess.Write))

            {

                Console.WriteLine("请输入信息");

                string str = Console.ReadLine();

                byte[] bs = Encoding.Default.GetBytes(str);

                for (int i = 0; i < bs.Length; i++)

                {

                    fileWriter.WriteByte(bs[i]);

                }

            }
}   
  1. 下命令执行参数控制次,实现控制台程序的法copy

                          {

    (3)复制文件,对文本加密,解密

(4)输入的信如图所示:

 static void Main(string[] args)

{

            //保证给的参数只有两个

            if (args.Length != 2)

            {

                Console.WriteLine("命令语法不正确");

                return;

            }

            //得到文件的路径

            string file1 = args[0];

            string file2 = args[1];

            //判断第一个文件是否存在

            try

            {

                using (FileStream fileRead = new FileStream(file1, FileMode.Open, FileAccess.Read))

                {

                    using (FileStream fileWrite = new FileStream(file2, FileMode.Create, FileAccess.Write))

                    {

                        byte[] bs = new byte[10 * 1024];

                        int count = 0;

                        while ((count = fileRead.Read(bs, 0, bs.Length)) > 0)

                        {

                            fileWrite.Write(bs, 0, count);

                        }

                        Console.WriteLine("以复制\t\t1个文件");

                    }

                }

            }

            catch

            {

                Console.WriteLine("系统找不到指定文件");

            }

}

            string p1= Path.ChangeExtension(path, “rmvb”);

  1. FileStream

     (3)使用Writer创建文件又写副信息: 

   前言:这首博客我主要说一样下C#中文件流的使规则,也是打太基础方面去说,也信任我们大家而是干Web行业之这些知识点肯定能够就此上,其中介绍几单操作文件流的好像,Path类,FileStream类,Read和Write方法的利用

(3)使用Write和Read复制文件

                          using(fileWrite)

(7)更改文件后缀名 ChangeExtension

            string p3 = Path.GetExtension(path);

     (4)自己手动书写一个ACSII码表,不欲百度了,只要我们程序员发处理器

    (1) ReadByte() 读取一个字节,返回对应的第一手代表数字之十进制形式

(6)得到文件名 GetFileName

static void Main(string[] args)

{

            List<string> list = new List<string>();

            list.Add("<body>");

            for (int i = 0; i < 128; i++)

            {

                list.Add(string.Format("子符  <font size=\"7\" color=\"red\">{0}</font>  的ASCII码为  <font size=\"7\" color=\"red\">{1}</font>  <br/>", (char)i, i));

            }

            list.Add("</body>");

            File.WriteAllLines("ASCII.html", list.ToArray(), Encoding.Default);

}

      图片 10

(8)返回临时文件夹   GetTempPath

(2)合并路径   Combine

            1)[根目录:\]文件夹\文件名.后缀名

      string p4 = Path.Combine(@”c:\123a\abc\”,
“白天休懂夜的黑.mp3”);

       string p5 = Path.Combine(@”c:\123a\abc”, “白天非懂夜的黑.mp3”);

            string p6 = Path.GetFileName(path);

                                
while((count=fileRead.Read(bs,0,bs.Length))>0)

 static void Main(string[] args)

        {

            //对文件进行一个简单加密

            using (FileStream fileRead = new FileStream("梦想的力量.mp3", FileMode.Open, FileAccess.Read))

            {

                using (FileStream fileWrite = new FileStream("梦想.mp3", FileMode.Create, FileAccess.Write))

               {

                    int num = -1;

                    while ((num = fileRead.ReadByte()) != -1)

                    {

                        num++;

                        fileWrite.WriteByte((byte)num);

                   }

                    Console.WriteLine("OK");

                }

            }

            //对上面加密的文件进行解密

            using (FileStream fileRead = new FileStream("梦想.mp3", FileMode.Open, FileAccess.Read))

      {

                using (FileStream fileWrite = new FileStream("梦想_解密.mp3", FileMode.Create, FileAccess.Write))

                {

                    int num = -1;

                    while ((num = fileRead.ReadByte()) != -1)

                    {

                        num--;

                        fileWrite.WriteByte((byte)num);

                    }

                    Console.WriteLine("OK");

                }

            }

 }

(3)将之文件复制到C:\Windows这个目录下面,然后启动cmd命令

                                 byte[] bs=new byte[10*1024*1024];

(3)获得文件夹的门道  GetDirectoryName

下篇博客再说一下部分其他的流文件,读写流StreamReader和StreamWriter方法,还有File类和Directory类。

(1)父类Stream(流)

                          }

(1) 文件路径有什么特色?

                   }

    (2)WriteByte() 可以形容一个字节

            string s= Path.GetTempPath();

                   using(fileRead)

static void Main(string[] args)

{

            //读取文件流

            byte[] bs=new byte[10];

            using (FileStream fileRead = new FileStream("file.txt", FileMode.Open, FileAccess.Read))

            {

                //Read(存放数据的byte数组,从数组的第一号位置开始放数据,取出多少数据)

                //一般情况使用的时候 Read(数组名,0,数组名.Length);

                int count = 0;

                while ((count = fileRead.Read(bs, 0, bs.Length))>0)

                {

                    for (int i = 0; i < count; i++)

                    {

                        Console.WriteLine((char)bs[i]);

                    }

                }

            }

            //写流

            using(FileStream fileWrite=new FileStream("file.txt",FileMode.Create,FileAccess.Write))

            {

                byte[] bs = { 0, 97, 98, 99, 48, 49 };

                fileWrite.Write(bs, 1, bs.Length - 1);

            }

}

                                 {

                                 }

static void Main(string[] args)

{

                          using (FileStream fileRead = new FileStream(@"F:\heima\practice\总复习\文件流的读取\bin\Debug\SqlHelper.txt", FileMode.Open, FileAccess.Read))

         {

                    int num;

                    while ((num = fileRead.ReadByte()) != -1)

                    {

                            Console.Write((char)num);

                     }

                    Console.ReadKey();

        }

 }

            string p2 = Path.GetDirectoryName(path);

            ->读取文件,就得想方打开文件,使用构造方法

                                        fileWrite.Write(bs,0,count);

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图