Shell 助力开发效率提升

(题图:毕业旅行之决战青海湖)

本文主要来源于小组内部的一个小的分享, 这里整理成一篇文章po出来.  题目叫 “Shell 助力开发效率提升”, 更切题的应该是叫 “命令行” 提升开发效率, 这里并没有讲到Shell编程, 而是主要介绍Linux 或者 Mac下常用的一些基本工具命令来帮助处理一些日常事务.  (其实之前这篇文章Mac 软件推荐(续)之程序猿篇也大致提到了本文中的大部分内容)

通过本文的介绍, 你应该对相关命令有一个初步的了解, 知道比如用什么命令可以完成怎样的操作,
至于具体的参数, 你不用去刻意地记, 等到你用到的时候, 你再去 cmd --help 或者 man cmd去看, 用熟悉了, 常用的你也就记住了.

本文首先介绍了Linux/Mac下一些常用的命令行工具, 然后介绍了一些常用的命令, 最后通过一两个案例来说明这些工具的强大之处:
比如给定一个nginx日志文件, 能够找出HTTP 404 请求最多的top 10 是什么?  比如能找到请求耗时最多的top 10是什么?  再比如能够简单的得到每小时的”PV”是多少?
再比如拿到一篇文章, 能否简单统计一下这篇文章单次词频最高的10个词语是什么?

Mac 环境

  • zsh

  • on-my-zsh

  • plugin

    • git

    • autojump

    • osx(man-preview/quick-look/pfd(print Finder director)/cdf(cd Finder))

  • 常用快捷键(bindkey)

  • 演示: 高亮/git/智能补全/跳转(j,d)…

关于Mac相关的技巧, 更多的可以参考以下三篇文章: Mac 软件推荐, Mac 软件推荐(续) -- !程序猿篇, 和 Mac 软件推荐(续)之程序猿篇

Shell 基础命令

  • which/whereis, 常用 whatis, man, --help

      ➜  .oh-my-zsh git:(master)$ whereis ls
      /bin/ls
      ➜  .oh-my-zsh git:(master)$ which ls
      ls: aliased to ls -G
  • 基本文件目录操作

      rm, mkdir, mv, cp, cd, ls, ln, file, stat, wc(-l/w/c), head, more, tail, cat...
  • 利器 管道: |

Shell 文本处理

这里就是通过案例讲了一下12个命令的大致用法和参数, 可以通过点击右边的目录直达你想要了解的命令.

find, grep, xargs, cut, paste, comm
join, sort, uniq, tr, sed, awk

find

  • 常用参数

    • 文件名 -name, 文件类型-type, 查找最大深度-maxdepth

    • 时间过滤(create/access/modify) -[cam]time

    • 执行动作 -exec

  • 示例

      find ./ -name "*.json"
      find . -maxdepth 7 -name "*.json" -type f
      find . -name "*.log.gz" -ctime +7 -size +1M -delete (atime/ctime/mtime)
      find . -name "*.scala" -atime -7 -exec du -h {} \;

grep

  • 常用参数

    • -v(invert-match),

    • -c(count),

    • -n(line-number),

    • -i(ignore-case),

    • -l, -L, -R(-r, —recursive), -e

  • 示例

      grep 'partner' ./*.scala -l
      grep -e 'World' -e 'first' -i -R ./  (-e: or)
  • 相关命令: grep -z / zgrep / zcat xx | grep

xargs

  • 常用参数

    • -n(每行列数),

    • -I(变量替换)

    • -d(分隔符), Mac 不支持, 注意与GNU版本的区别

  • 示例

      find . -type f -name "*.jpg" | xargs -n1 -I {} du -sh {}

cut

  • 常用参数

    • -b(字节)

    • -c(字符)

    • -f(第几列), -d(分隔符), f范围: n, n-, -m, n-m

  • 示例

     echo "helloworldhellp" | cut -c1-10
     cut -d, -f2-8 csu.db.export.csv

paste

  • 常用参数

    • -d 分隔符

    • -s 列转行

  • 示例

     ➜  Documents$ cat file1 1 11
     2 22
     3 33
     4 44
     ➜  Documents$ cat file2
     one     1
     two     2
     three   3
     one1    4
    
     ➜  Documents$ paste -d, file1 file2 1 11,one     1
     2 22,two     2
     3 33,three   3
     4 44,one1    4
     ➜  Documents$ paste -s -d: file1 file2
     a 11:b bb:3 33:4 44
     one     1:two     2:three   3:one1    4

join

类似sql中的 ...inner join ...on ..., -t 分隔符, 默认为空格或tab

➜  Documents$ cat j11 112 223 334 445 55➜  Documents$ cat j2
one     1   0one     2   1two     4   2three   5   3one1    5   4➜  Documents$ join -1 1 -2 3 j1 j21 11 one 22 22 two 43 33 three 54 44 one1 5

comm

  • 常用参数

    • 用法 comm [-123i] file1 file2

    • 字典序列, 3列: 只在file1/file2/both

    • - 去掉某列, i 忽略大小写

  • 示例

      ➜  Documents$ seq 1 5 >file11
      ➜  Documents$ seq 2 6 >file22
      ➜  Documents$ cat file11  1
      2
      3
      4
      5
      ➜  Documents$ cat file22  2
      3
      4
      5
      6
      ➜  Documents$ comm file11 file22  1
              2
              3
              4
              5
          6
      ➜  Documents$ comm -1 file11 file22      2
          3
          4
          5
      6
      ➜  Documents$ comm -2 file11 file22  1
          2
          3
          4
          5
      ➜  Documents$ comm -23 file11 file22  1

相关命令 diff(类似git diff)

sort

  • 常用参数

    • -d, —dictionary-order

    • -n, —numeric-sort

    • -r, —reverse

    • -b, —ignore-leading-blanks

    • -k, —key

  • 示例

     ➜  Documents$ cat file2
     one     1
     two     2
     three   3
     one1    4
     ➜  Documents$ sort file2
     one     1
     one1    4
     three   3
     two     2
     ➜  Documents$ sort -b -k2 -r file2
     one1    4
     three   3
     two     2
     one     1

uniq

  • 常用参数

    • -c 重复次数

    • -d 重复的

    • -u 没重复的

    • -f 忽略前几列

  • 示例

     ➜  Documents$ cat file4 11
     22
     33
     11
     11
     ➜  Documents$ sort file4 | uniq -c    3 11
        1 22
        1 33
     ➜  Documents$ sort file4 | uniq -d
     11
     ➜  Documents$ sort file4 | uniq -u 22
     33
     ➜  Documents$ cat file3
     one     1
     two     1
     three   3
     one1    4
     ➜  Documents$ uniq -c -f 1 file3    2 one     1
        1 three   3
        1 one1    4

注意: uniq比较相邻的是否重复, 一般与sort联用

tr

  • 常用参数

    • -c 补集

    • -d 删除

    • -s 压缩相邻重复的

  • 示例

     ➜  Documents$ echo '1111234444533hello' | tr  '[1-3]' '[a-c]'
     aaaabc44445cchello
     ➜  Documents$ echo '1111234444533hello' | tr -d '[1-3]'
     44445hello
     ➜  Documents$ echo '1111234444533hello' | tr -dc '[1-3]'
     11112333
     ➜  Documents$ echo '1111234444533hello' | tr -s '[0-9]'
     123453hello
     ➜  Documents$ echo 'helloworld' | tr '[:lower:]' '[:upper:]'
     HELLOWORLD

sed

  • 常用参数

    • -d 删除

    • -s 替换, g 全局

    • -e 多个命令叠加

    • -i 修改原文件(Mac下加参数 “”, 备份)

  • 示例

     ➜  Documents$ cat file2
     one     1
     two     2
     three   3
     one1    4
     ➜  Documents$ sed "2,3d" file2
     one     1
     one1    4
     ➜  Documents$ sed '/one/d' file2
     two     2
     three   3
     ➜  Documents$ sed 's/one/111/g' file2 111     1
     two     2
     three   3
     1111    4
     #将one替换成111 并将含有two的行删除
     ➜  Documents$ sed -e 's/one/111/g' -e '/two/d' file2 111     1
     three   3
     1111    4
     # ()标记(转义), \1 引用
     ➜  Documents$ sed 's/\([0-9]\)/\1.html/g' file2
     one     1.html
     two     2.html
     three   3.html
     one1.html    4.html # 与上面一样 & 标记匹配的字符
     ➜  Documents$ sed 's/[0-9]/&.html/g' file2
     one     1.html
     two     2.html
     three   3.html
     one1.html    4.html
     ➜  Documents$ cat mobile.csv "13090246026"
     "18020278026"
     "18520261021"
     "13110221022"
     ➜  Documents$ sed 's/\([0-9]\{3\}\)[0-9]\{4\}/\1xxxx/g' mobile.csv "130xxxx6026"
     "180xxxx8026"
     "185xxxx1021"
     "131xxxx1022"

awk

  • 基本参数和语法

    • NR 行号, NF 列数量

    • $1 第1列, $2, $3

    • -F fs  fs分隔符,字符串或正则

    • 语法:  awk 'BEGIN{ commands } pattern{ commands } END{ commands }', 流程如下:

  1. 执行begin

  2. 对输入每一行执行 pattern{ commands }, pattern 可以是 正则/reg exp/, 关系运算等

  3. 处理完毕, 执行 end

  • 示例

     ➜  Documents$ cat file5 11  11 aa cc 22  22 bb 33  33 d 11  11
     11  11
     #行号, 列数量, 第3列
     ➜  Documents$ awk '{print NR"("NF"):", $3}' file5 1(4): aa 2(3): bb 3(3): d 4(2): 5(2): #字符串分割, 打印1,2列
     ➜  Documents$ awk -F"xxxx" '{print $1, $2}' mobile.csv "130 6026"
     "180 8026"
     "185 1021"
     "131 1022"
     #添加表达式
     ➜  Documents$ awk '$1>=22 {print NR":", $3}' file5 2: bb 3: d #累加1到36,奇数,偶数
     ➜  Documents$ seq 36 | awk 'BEGIN{sum=0; print "question:"} {print $1" +"; sum+=$1} END{print "="; print sum}' | xargs | sed 's/+ =/=/'
     question: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 = 666
     ➜  Documents$ seq 36 | awk 'BEGIN{sum=0; print "question:"} $1 % 2 ==1 {print $1" +"; sum+=$1} END{print "="; print sum}' | xargs | sed 's/+ =/=/'
     question: 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21 + 23 + 25 + 27 + 29 + 31 + 33 + 35 = 324
     ➜  Documents$ seq 36 | awk 'BEGIN{sum=0; print "question:"} $1 % 2 !=1 {print $1" +"; sum+=$1} END{print "="; print sum}' | xargs | sed 's/+ =/=/'
     question: 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + 22 + 24 + 26 + 28 + 30 + 32 + 34 + 36 = 342
  • 其他高级语法: for, while 等, 各种函数等, 本身awk是一个强大的语言, 可以掌握一些基本的用法.

    实际应用

    日志统计分析

    例如拿到一个nginx日志文件, 可以做很多事情, 比如看哪些请求是耗时最久的进而进行优化, 比如看每小时的”PV”数 等等.

    ➜  Documents$ head -n5 std.nginx.log106.38.187.225 - - [20/Feb/2017:03:31:01 +0800] www.tanglei.name "GET /baike/208344.html HTTP/1.0" 301 486 "-" "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 975382" "106.38.187.225, 106.38.187.225" - 0.000106.38.187.225 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name "GET /baike/208344.html HTTP/1.0" 301 486 "-" "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 975382" "106.38.187.225, 106.38.187.225" - 0.00010.130.64.143 - - [20/Feb/2017:03:31:02 +0800] stdbaike.bdp.cc "POST /baike/wp-cron.php?doing_wp_cron=1487532662.2058920860290527343750 HTTP/1.1" 200 182 "-" "WordPress/4.5.6; http://www.tanglei.name/baike" "10.130.64.143" 0.205 0.20510.130.64.143 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name "GET /external/api/login-status HTTP/1.0" 200 478 "-" "-" "10.130.64.143" 0.003 0.00410.130.64.143 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name "GET /content_util/authorcontents?count=5&offset=0&israndom=1&author=9 HTTP/1.0" 200 11972 "-" "-" "10.130.64.143" 0.013 0.013

    上面是nginx的一个案例, 例如希望找到top 10 请求的path:

    head -n 10000 std.nginx.log | awk '{print $8 "," $10}' | grep ',404' | sort | uniq -c | sort -nr -k1 | head -n 10#orhead -n 10000 std.nginx.log | awk '$10==404 {print $8}' |sort | uniq -c | sort -nr -k1 | head -n 10

    当然, 你可能一次不会直接处理成功, 一般会先少拿一部分数据进行处理看逻辑是否正常, 或者你可以缓存一些中间结果.

    cat std.nginx.log | awk '{print $8 "," $10}' | grep ',404' >404.log
    sort 404.log | uniq -c | sort -nr -k1 | head -n 10

    再比如每小时请求数量, 请求耗时等等

    ➜  Documents$ head -n 100000 std.nginx.log | awk -F: '{print $1 $2}' | cut -f3 -d/ | uniq -c8237 20170315051 20170416083 20170518561 20170622723 20170719345 201708

    其他实际案例 ip block

    案例: db数据批处理

    背景: 因为某服务bug, 导致插入到db的图片路径不对, 需要将形如(安全需要已经将敏感数据替换)
    https://www.tanglei.name/upload/photos/129630//internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg
    替换成
    http://www.tanglei.me/internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg, 因为mysql等db貌似不支持直接正则的替换, 所以不能够很方便的进行写sql进行替换.
    当然将数据导出, 然后写python等脚本处理也是一种解决方案, 但如果用上面的命令行处理, 只需要几十秒即可完成.

    步骤:

    1. 准备数据

       select id, photo_url_1, photo_url_2, photo_url_3 from somedb.sometable where 
       photo_url_1 like 'https://www.tanglei.name/upload/photos/%//internal-public/%' or
       photo_url_2 like 'https://www.tanglei.name/upload/photos/%//internal-public/%' or
       photo_url_3 like 'https://www.tanglei.name/upload/photos/%//internal-public/%';
    2. 替换原文件
      一般在用sed替换的时候, 先测试一下是否正常替换.

       #测试是否OK
       head -n 5 customers.csv | sed 's|https://www.tanglei.name/upload/photos/[0-9]\{1,\}/|http://www.tanglei.me|g'
       # 直接替换原文件, 可以sed -i ".bak" 替换时保留原始备份文件
       sed -i "" 's|https://www.tanglei.name/upload/photos/[0-9]\{1,\}/|http://www.tanglei.me|g' customers.csv
    3. 拼接sql, 然后执行

       awk -F, '{print "update sometable set photo_url_1 = " $2, ", photo_url_2 = " $3, ", photo_url_3 = " $4, " where id = " $1 ";" }' customers.csv > customer.sql #然后执行sql 即可

    其他

    • play framework session

      • 老方式: 需要启play环境, 慢

        sbt "project site" consoleQuickimport play.api.libs._val sec = "secret...secret"var uid = "97522"Crypto.sign(s"uid=$uid", sec.getBytes("UTF-8")) + s"-uid=$uid"
      • 新方式:

        ➜  Documents$  ~/stdcookie.sh 97522918xxxxdf64abcfcxxxxc465xx7554dxxxx21e-uid=97522➜  Documents$ cat ~/stdcookie.sh#!/bin/bash ##  cannot remove this lineuid=$1hash=`echo -n "uid=$uid" | openssl dgst -sha1 -hmac "secret...secret"`echo "$hash-uid=$uid"
    • 统计文章单词频率: 下面案例统计了川普就职演讲原文中词频最高的10个词.

        ➜  Documents$ head -n3 chuanpu.txt
        Chief Justice Roberts, President Carter, President Clinton, President Bush, President Obama, fellow Americans and people of the world, thank you.
      
        We, the citizens of America, are now joined in a great national effort to rebuild our country and restore its promise for all of our people. Together we will determine the course of America and the world for many, many years to come.
        ➜  Documents$ cat chuanpu.txt | tr -dc 'a-zA-Z ' | xargs -n 1 | sort | uniq -c | sort -nr -k1 | head -n 20
          65 the    63 and    48 of    46 our    42 will    37 to    21 We    20 is    18 we    17 America    15 a    14 all    13 in
          13 for
          13 be    13 are    10 your    10 not    10 And    10 American
    • 随机数

        ➜  Documents$ cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 5
        cpBnvC0niwTybSSJhUUiZwIz6ykJxBvu
        VDP56NlHnugAt2yDySAB9HU2Nd0LlYCW  0WEDzpjPop32T5STvR6K6SfZMyT6KvAI
        a9xBwBat7tJVaad279fOPdA9fEuDEqUd
        hTLrOiTH5FNP2nU3uflsjPUXJmfleI5c
        ➜  Documents$ cat /dev/urandom | head -c32 | base64
        WoCqUye9mSXI/WhHODHDjzLaSb09xrOtbrJagG7Kfqc=
    • 图片处理压缩, 可批量改图片大小等等 sips

        ➜  linux-shell-more-effiency$ sips -g all which-whereis.png
        /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png
          pixelWidth: 280
          pixelHeight: 81
          typeIdentifier: public.png
          format: png
          formatOptions: default
          dpiWidth: 72.000
          dpiHeight: 72.000
          samplesPerPixel: 4
          bitsPerSample: 8
          hasAlpha: yes
          space: RGB
          profile: DELL U2412M
        ➜  linux-shell-more-effiency$ sips -Z 250 which-whereis.png
        /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png
          /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png
        ➜  linux-shell-more-effiency$ sips -g all which-whereis.png
        /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png
          pixelWidth: 250
          pixelHeight: 72
          typeIdentifier: public.png
          format: png
          formatOptions: default
          dpiWidth: 72.000
          dpiHeight: 72.000
          samplesPerPixel: 4
          bitsPerSample: 8
          hasAlpha: yes
          space: RGB
          profile: DELL U2412M
        ➜  linux-shell-more-effiency$ sips -z 100 30 which-whereis.png
        /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png
          /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png
        ➜  linux-shell-more-effiency$ sips -g pixelWidth -g pixelHeight which-whereis.png
        /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png
          pixelWidth: 30
          pixelHeight: 100

    Reference

    • Linux工具快速教程

    • Linux命令大全

    • Advanced Bash-Scripting Guide

    • UNIX环境高级编程

    MySQL数据库从入门实战课

    12-31
    限时福利1:购课进答疑群专享柳峰(刘运强)老师答疑服务。 限时福利2:购课后添加学习助手(微信号:csdn590),按消息提示即可领取编程大礼包! 注意:原价129的课程,最后2天限时秒杀仅需49元!! 为什么说每一个程序员都应该学习MySQL? 根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能! 【课程设计】 在本课程中,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。 本课程包含3大模块:  一、基础篇: 主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。 二、SQL语言篇: 本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,学会熟练对库表进行增删改查等必备技能。 三、MySQL进阶篇: 本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。  

    Python入门到实战一卡通

    06-09
    <span><span><span><span> <p class="ql-long-24357476"> <span> </span> </p> <p class="ql-long-24357476"> 【课程特色】 </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">1、超强师资+体系全面+ 1 对 1 答疑+离线缓存+永久有效,无限回放</span> </p> <p class="ql-long-24357476"> 2、知识全面系统,从Python入门到逐步进阶到爬虫、数据分析、Web框架、人工智能应用 </p> <p class="ql-long-24357476"> <br> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">【优惠说明】</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">1、8大课程,250余节视频课,原价998元,今日联报立减800,仅需198元</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">2、</span>现在购课,就送价值800元的编程大礼包! </p> <p class="ql-long-24357476"> 备注:请添加微信:itxy41,按提示获取讲师答疑服务。 </p> <p> <br> </p> <p class="ql-long-24357476"> 讲师介绍:裴帅帅,前百度资深架构师,现爱奇艺算法架构师全程亲自授课。 </p> <p> <br> </p> <p class="ql-long-24357476"> 【为什么要学习这门套餐课?】 </p> <p class="ql-long-24357476"> Python无论是在web/爬虫/人工智能/大数据/机器学习/测试/运维/数据分析等等领域都有大量的应用,但是作为小白来讲,很难确定最适合自己的应用方向。 </p> <p> <br> </p> <p class="ql-long-24357476"> 在这门课程中,将带你从零入门Python,并向你讲授实战 Python 各个应用方向的核心知识点,同时应用于实战项目。 </p> <p> <br> </p> <p class="ql-long-24357476"> 【学完后我将达到什么水平?】 </p> <p class="ql-long-24357476"> 你将能够熟练掌握 Python 在人工智能时代的多种技能,具备使用 Python 编写代码完成 Web 后台开发、网络爬虫、数据分析、机器学习、推荐系统等多种项目实战的能力,掌握 Python 全栈工程师的核心能力。 </p> <p> <br> </p> <p class="ql-long-24357476"> 【课程学习路径】 </p> <p class="ql-long-24357476"> 本套课以市场就业和职位需求为核心,从 Python 入门到多领域实战,并结合 Python 全栈工程师的进阶路线,共分为八大模块,分别是:Python 基础、Python Web 开发、Python 爬虫、Numpy 数据计算、Pandas 数据分析、Python数据可视化、Tensorflow 深度学习、推荐系统实战应用模块。 </p> <p> <br> </p> <p class="ql-long-24357476"> 套餐中一共包含8门Python课程(共246讲)助你从零进阶Python全栈工程师! </p> <p class="ql-long-24357476"> 课程1:《Python零基础入门视频教程》 </p> <p class="ql-long-24357476"> 课程2:《Python爬虫从入门到实战》 </p> <p class="ql-long-24357476"> 课程3:《Python使用Flask开发Web服务》 </p> <p class="ql-long-24357476"> 课程4:《Python使用Numpy入门数据计算》 </p> <p class="ql-long-24357476"> 课程5:《Python使用Pandas入门数据分析》 </p> <p class="ql-long-24357476"> 课程6:《Python数据图表可视化》 </p> <p class="ql-long-24357476"> 课程7:《Tensorflow深度学习从入门到实战》 </p> <p class="ql-long-24357476"> 课程8:《推荐系统技术入门到实战》 </p> <p> <br> </p> <p class="ql-long-24357476"> 【面向人群】 </p> <p class="ql-long-24357476"> 1、在校计算机专业或者对软件编程感兴趣的学生; </p> <p class="ql-long-24357476"> 2、想要使用数据分析、网络爬虫提升职场竞争力升职加薪的各行各业的企业白领; </p> <p class="ql-long-24357476"> 3、想要转方向成为数据分析师、大数据开发、机器学习算法、推荐系统工程师的职场码农; </p> <p class="ql-long-24357476"> 4、准备从事人工智能、Python开发的程序员。 </p> </span> <p> <br> </p> <p class="ql-long-24357476"> <br> </p> <p> <br> </p> <p class="ql-long-24357476"> 【课程知识体系图】 </p> </span></span></span> <p> <img src="https://img-bss.csdnimg.cn/202006100818561687.png" alt=""> </p>

    150讲轻松搞定Python网络爬虫

    05-16
    【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。   从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑
    ©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
    实付0元
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

    余额充值