使用shell来实现一个简单的爬虫

Zss 发表于:

使用shell实际上也是可以写一些爬虫的,在python中我们请求使用自带的urllib或者request库来实现请求

那么在shell中我们可以实现curl来实现一些请求的模拟,get,post,都可以,提交数据什么的都可以模拟

只是没有python中那么用的顺手,当然我相信python中使用肯定会更方便,只是为了练习一下正则表达式来过滤一些信息而已

信息的过滤在python中使用xpath或者re,在shell中那么也只能使用re来过滤信息了,再使用sed来处理一些多余的信息

之后可以多熟悉熟悉一下curl的命令的使用,可以添加请求头,模拟json格式数据的提交,上传文件,下载等等。。。

抓取的是自己博客之前的文章内容写入到一个txt中

#!/bin/sh

`curl http://www.testone.top/?cat=10 > html.txt`
url=`cat html.txt |grep -Eo 'w{3}\..*/\?p=[0-9]+'`
for i in ${url};do
        echo --- 地址:${i} ---
        echo 地址:${i} --- `curl ${i}|grep -Eo 'mark">(.*)</a>'|sed -e 's/mark">//g;s/<\/a>//g'` >> myblog.txt
        curl ${i} |grep -Eo '<strong>(.*)</strong>|<pre>(.*)?</pre>|<p>(.*)</p>' |sed -e 's/<p>//g;s/<\/p>//g;s/<strong>//g;s/<\/strong>//g;s/<span>//g;s/<\/span>//g;s/<pre>//g;s/<\/pre>//g' >> myblog.txt
        echo -e '\n' >> myblog.txt
done
地址:www.testone.top/?p=911 --- 断言和异常处理
程序中的错误太常见了,这些错误称之为异常,那么当这些错误可能出现的时候,可以使用try语句来捕获这些异常,并且进行相应的一些操作
这样子就不会直接造成程序的奔溃,使其脚本变得更加健壮,之前在写一些异常处理时,我是直接忽略所有的异常,因为在一个某些脚本中循环的操作
可能会带来一些异常,但是一次的异常并不会造成什么影响,所以直接忽略掉进入下一次循环的操作,但是这样子是不好的,看不到异常类型,虽然我也并不需要看。。。
不过还是总结一下python的异常操作处理<span id="more-911">
try:
语句块
except:pass
a实际上没有定义,会出现一个异常,然而程序正常运行,直接会忽略掉错误,打印pass
像这种情况下是没有任何信息提示的,在调试时就真不能这么用,不然有问题是根本不知道在哪里
可以捕获除与程序退出sys.exit()相关之外的所有异常
老版本的Python,except语句写作&#8221;except Exception, e&#8221;,Python 2.6后应写作&#8221;except Exception as e&#8221;
当语句1执行出现了错误那么执行语句2,不执行语句3
当语句1执行未出现错误那么执行语句3,不执行语句2
当try中出现错误时,跳过出错后的语句,直接执行finally中的语句
若try中未出现错误,顺序执行下来
<!--more-->
添加一个异常后,再执行finally
assert断言是声明其布尔值必须为真的判定,用来测试表示式,其返回值为假,就会触发异常,那么在平时测试脚本的编写时,断言就有很大的用处了,譬如:定义一个测试某段程序的,某个功能的函数或者方法,若正确则返回True,若失败则返回False,配合上try语句的异常捕获,和断言的处理,可以很好的处理测试的结果
需要注意的是,assert语句一般用于开发时对程序条件的验证,只有当内置_debug_为True时,assert语句才有效。当Python脚本以-O选项编译成为字节码文件时,assert语句将被移除。
也就是当 assert True 时,此时正常,若为False,那么则引发异常,当发生异常时,可以使用自定义的异常字符串打印出来就可以知道是什么东西错了,用例的运行也就知道了哪里失败了
只会捕获第一个异常,如果异常没有被第一个<code>except</code>语句块处理,那么它也许被下一个语句块处理,或者根本不会被处理
或者将其放置在一个元组中
<!--more-->
标准异常类型:


地址:www.testone.top/?p=905 --- Hardware Nat
了解HNAT,那么我们必须需要先知道NAT是什么? 在之前的文章中自己有NAT梳理过,实际上一种为软件NAT,一种为硬件NAT,由于工作需要写关于HNAT的文档,所以一起总结在博客中,讲道理华硕的路由器是真的强。。。
一般的家用路由器在软件中完成所有路由功能,CPU需要处理所有数据的转发,这意味着它们要么必须具有快速CPU(成本高,使用大量电源),要么性能受损
&nbsp;
硬件NAT是一种通过硬件加速NAT路由功能的方法,硬件NAT意味着所有与NAT相关的工作都由一个单独的芯片完成,该芯片专用于这些操作。这可以减轻这些任务的CPU,因此主CPU有更多的资源用于其他任务的处理,主CPU不必处理大量路由流量,进一步提升数据包的转化效率,转化的效率即为lan侧和wan侧地址的相互映射