2017-02-28 22:58:51 Allensb 阅读数 3388
  • Python爬虫实战(Requests+BeautifulSoup版)

    本课程是一个Python爬虫实战课程,课程主要使用Requests+BeautifulSoup实现爬虫,课程包括五个部分: 第一部分:CSS选择器 ,主要讲解类选择器,ID选择器,标签选择器,伪类和伪元素,以及组合选择器等。 第二部分:Python正则表达式 ,主要讲解Python对正则表达式的支持,匹配单字符、匹配多字符、匹配开头结尾、匹配分组、 search、findall、sub、split 等方法以及 贪婪和非贪婪匹配。 第三部分:Requests框架,主要讲解如何发送请求,如何获得响应结果、Cookie、Session、超时和代理的处理 第四部分:BeautifulSoup框架 , 主要讲解遍历文档、搜索文档和修改文档。 第五部分:项目,通过爬取博客园博客文章融汇贯通的运用了所学内容。

    7330 人正在学习 去看看 郭宏志

#include <unistd.h>

ssize_read (int fd, void *buf, size_t nbytes);

返回值: 读到的字节数,若已读到文件结尾,返回0;若出错,返回-1;

记录一下容易出错的地方:

         1、 读普通文件时,在读到要求字节数之前已经达到了文件结尾。eg:若在达到文件尾端之前有30个字节,而要求读50个字节,则read返回30,下次在调用read时将返回0;

         2、 当从终端设备读时, 通常一次最多读一行。

         3、 当从网络读时,网络中的缓冲机制可能造成返回值小于所要求读的字节数。

         4、 当从管道FIFO读时,如若管道包含的字节少于所需求的数值,那么read将只返回实际可用的字节数。

         5、 当从某些面向记录的设备(如磁带)读时,一次最多返回一个记录。

         6、 当一信号造成中断,而已经读了部分数据量时,一种处理方式操作系统可以认为该系统调用失败,并将errno设置为EINTR;另一种处理方式是允许该系统调用成功返回,返回值是已经接收到的数据量。

          网上的demo已经很多了,可以参考一下。虽然这个函数不难而且常用,应该注意的地方还是不能松懈。。———来自UNIX环境高级编程

2015-10-17 18:55:44 u013588143 阅读数 199
  • Python爬虫实战(Requests+BeautifulSoup版)

    本课程是一个Python爬虫实战课程,课程主要使用Requests+BeautifulSoup实现爬虫,课程包括五个部分: 第一部分:CSS选择器 ,主要讲解类选择器,ID选择器,标签选择器,伪类和伪元素,以及组合选择器等。 第二部分:Python正则表达式 ,主要讲解Python对正则表达式的支持,匹配单字符、匹配多字符、匹配开头结尾、匹配分组、 search、findall、sub、split 等方法以及 贪婪和非贪婪匹配。 第三部分:Requests框架,主要讲解如何发送请求,如何获得响应结果、Cookie、Session、超时和代理的处理 第四部分:BeautifulSoup框架 , 主要讲解遍历文档、搜索文档和修改文档。 第五部分:项目,通过爬取博客园博客文章融汇贯通的运用了所学内容。

    7330 人正在学习 去看看 郭宏志

1.文件描述符以及重定向
将标准输出重定向到文件中
echo “this is a sample test” > t1.txt,这种重定向会覆盖文件原有内容
echo “this is test2” >> t1.txt这种重定向会追加在文件结尾
将stderr重定向到文件中
ls +2>out.txt
将stderr和stdout分别重定向到不同的文件中
cmd 2>stderr.txt 1>stdout.txt
| 代表管道,可以接受stdin的命令,提供一种方法既可以将stdout数据重定向到文件,又可以将重定向数据作为后续命令的stdin(tee)
cat a* |tee out.txt | cat -n
cat: a1.txt: Permission denied
1 a2
2 a3
黑洞:、dev/null,数据到这就没了

2018-11-25 20:41:11 mike_learns_to_rock 阅读数 119
  • Python爬虫实战(Requests+BeautifulSoup版)

    本课程是一个Python爬虫实战课程,课程主要使用Requests+BeautifulSoup实现爬虫,课程包括五个部分: 第一部分:CSS选择器 ,主要讲解类选择器,ID选择器,标签选择器,伪类和伪元素,以及组合选择器等。 第二部分:Python正则表达式 ,主要讲解Python对正则表达式的支持,匹配单字符、匹配多字符、匹配开头结尾、匹配分组、 search、findall、sub、split 等方法以及 贪婪和非贪婪匹配。 第三部分:Requests框架,主要讲解如何发送请求,如何获得响应结果、Cookie、Session、超时和代理的处理 第四部分:BeautifulSoup框架 , 主要讲解遍历文档、搜索文档和修改文档。 第五部分:项目,通过爬取博客园博客文章融汇贯通的运用了所学内容。

    7330 人正在学习 去看看 郭宏志

用时: 60min
1.文件的建立与读写

  • Unix系统将数据存放文件中,使用系统调用操作文件
  • creat(filename, mode)
  • open(filename, how) 在进程和内核之间建立一条连接,这个连接就是文件描述符,就像一条进程通向内核的管道;常见错误:文件不存在/文件权限问题/目录权限问题
  • read(fd, buffer, amt),考虑读到文件结尾的错误
  • write(fd, buffer, amt),实际写入可能少于要求的,1.系统对文件尺寸的限制 2. 磁盘满
  • lseek(fd, distance, base)
  • close(fd),考虑文件不存在的错误

2.文件描述符

  • 进程对文件读写需要通过文件描述符,文件描述符表示文件和进程之间的连接
  • 一个文件打开多次,文件描述符是不同的

3.缓冲:用户级缓冲和内核级缓冲

  • 用户缓冲主要思想,一次性将大量数据放入buffer,需要时从buffer取数据
  • 内核缓冲:是对磁盘数据块做buffer
  • 内核缓冲read: read()是将内核buffer的数据拷贝到进程buffer;
  • 内核缓冲read miss:当内核buffer数据miss后,内核会在数据列表中记录该请求—> 挂起进程 —>服务其他进程 —> 从磁盘读入内核buffer —> 复制数据到进程buffer —> 唤醒进程
  • 内核缓冲write:写到内核buffer,一定数量后一并写入磁盘,优化磁盘写操作
  • 用户程序可以通过缓冲技术减少系统调用的次数,仅当写缓冲区满或者读缓冲区空时才调用内核服务
  • Unix内核通过缓冲技术减少访问磁盘I/O的次数

4.内核模式,用户模式和系统调用的代价

  • 代价:系统调用导致用户模式和内核模式的切换以及执行内核代码,减少系统调用次数会提高程序运行效率
  • 原因:系统调用开销大,一方面是传输数据
  • 原因:cpu进行模式切换,保存还原堆栈和内存状态,非常昂贵

5.系统调用中的错误检查和处理

  • 出错时会把全局变量errno的值设置为相应的错误码,然后返回-1;程序通过检查errno来确定错误类型,采取相应措施
2013-09-02 17:46:50 shiquxinkong 阅读数 1971
  • Python爬虫实战(Requests+BeautifulSoup版)

    本课程是一个Python爬虫实战课程,课程主要使用Requests+BeautifulSoup实现爬虫,课程包括五个部分: 第一部分:CSS选择器 ,主要讲解类选择器,ID选择器,标签选择器,伪类和伪元素,以及组合选择器等。 第二部分:Python正则表达式 ,主要讲解Python对正则表达式的支持,匹配单字符、匹配多字符、匹配开头结尾、匹配分组、 search、findall、sub、split 等方法以及 贪婪和非贪婪匹配。 第三部分:Requests框架,主要讲解如何发送请求,如何获得响应结果、Cookie、Session、超时和代理的处理 第四部分:BeautifulSoup框架 , 主要讲解遍历文档、搜索文档和修改文档。 第五部分:项目,通过爬取博客园博客文章融汇贯通的运用了所学内容。

    7330 人正在学习 去看看 郭宏志

在linux的文本中,在每一行的末尾会有默认的不可见的$符号,通过cat -E filename可以看的清楚。

如:

 

有很多时候需要将文本最后一行的$去掉,从而达到这样的显示效果:

而不是这样的:

   

这里有个稍显繁琐,但思路还算清晰的办法。

1、将最后一行读出来,将$符号处理掉,将没有$符号的内容保存起来。

    

2、将原来文件中的最后一行删除,以便将处理过的插入。

    

3、将处理的内容插入到文件末尾,实现替换的效果。

   

说明:sed 用-i 参数有风险,使用需谨慎。

2013-11-01 18:29:41 zhoulaowu 阅读数 1355
  • Python爬虫实战(Requests+BeautifulSoup版)

    本课程是一个Python爬虫实战课程,课程主要使用Requests+BeautifulSoup实现爬虫,课程包括五个部分: 第一部分:CSS选择器 ,主要讲解类选择器,ID选择器,标签选择器,伪类和伪元素,以及组合选择器等。 第二部分:Python正则表达式 ,主要讲解Python对正则表达式的支持,匹配单字符、匹配多字符、匹配开头结尾、匹配分组、 search、findall、sub、split 等方法以及 贪婪和非贪婪匹配。 第三部分:Requests框架,主要讲解如何发送请求,如何获得响应结果、Cookie、Session、超时和代理的处理 第四部分:BeautifulSoup框架 , 主要讲解遍历文档、搜索文档和修改文档。 第五部分:项目,通过爬取博客园博客文章融汇贯通的运用了所学内容。

    7330 人正在学习 去看看 郭宏志

read函数用于从打开的文件中读取数据,函数原型如下:

#include <unistd.h>
ssize_t read(int filedes, void *buf, size_t nbyetes);

返回值:如果读成功则返回实际读到的字节数,若已读到文件结尾则返回0,若出错则返回-1。

参数:

1、filedes 文件标识符,由调用open函数从内核获得。

2、*buf 存放所读数据的缓冲区地址。

3、nbytes 需要从文件中读取的数据字节数。


实例 x.3.7.1.c

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

#define BUFFSIZE 256
int main(void)
{
    char        pathname[] = "/tmp/myfile"; /*文件路径*/
    int         fileid;                     /*文件标识符*/

    off_t       f_offset;                   /*偏移量*/

    ssize_t     nread;                      /*读到的字节数*/
    char        buf[BUFFSIZE];              /*数据缓冲器*/
    size_t      nbytes;                     /*要读的字节数*/

/*打开文件,获取文件标识符*/
    fileid = open(pathname, O_RDONLY | O_CREAT);
    if (fileid == -1) {
        printf("open error for %s\n", pathname);
        return 1;
    }

/*定位文件读位置(当前文件偏移量)*/
    f_offset = lseek(fileid, 0, SEEK_SET);
    if (f_offset == -1) {
        printf("lseek error for %s\n", pathname);
        return 2;
    }
 
/*从文件中读取数据*/
    nbytes = 3;                           /*设置要读取的字节数*/
    nread = read(fileid, buf, nbytes);    /*调用read函数读取数据*/
    if (nread == -1) {                    /*判断读操作是否成功*/
        printf("read error for %s\n", pathname);
        return 3; 
    }

    nread = nread == 0 ? nbytes : nread; /*求实际读到的字节数*/
/*read函数不会在最后自动加上字符串结束符,所以要在nread位置加上'\0'*/
/*否则调用printf打印字符时会超越nread位置,从而导致不可知情况,甚至出错*/
/*如果不是调用数据不是作为一个字符或者不是调用printf打印字符就没必要这么做*/
    buf[nread] = '\0';
    printf("data is:%s\n", buf);

    close(fileid);

    return 0;
}


编译与执行:

data is:012[root@localhost unixc]# echo "0123456789" > /tmp/myfile
[root@localhost unixc]# cat /tmp/myfile
0123456789
[root@localhost unixc]# cc x.3.7.1.c
[root@localhost unixc]# ./a.out
data is:012
[root@localhost unixc]#

注意:

read函数虽然有一个参数nbtyes指定要读取的字节数,但有时候未必能读到指定的数量的数据。这几种会导致实际读到的字节数nread小于指定的字节数nbytes

1、读普通文件时,在未读到指定字节数的数据时,已经读到了文件的结尾。

2、从终端设备(例如标准输入)读数据时,nbytes大于终端设备每行最多的字节数。

3、从网络设备读数据时,网络设备的缓冲区所存数据小于nbytes

4、从管道或者FIFO读数据时,管道里面包含的字节数小于nbytes

所以,不用简单地把read的返回值nreade或者nbytes作为实际读到的字节数。

nread = nread == 0 ? nbytes : nread;可以断定实际读到的字节数。

linux的shell

阅读数 377

feof函数详解

阅读数 1701

没有更多推荐了,返回首页