简单的爬虫实验

说下背景,起因是因为公司业务上有一块,功能出现了问题,用户的设备端在去请求一个xml 文件的时候,发现从服务器总是下载出错,或者下载超级的慢,因为现有的环境是国外的客户的设备全部都链接到了国内的阿里云的服务器,然后导致下载异常的慢,所以现在想让过外的客户在下载文件的时候,可以判断如果设备端在国外,那么就重定向去新加坡的阿里云OSS 下载,否则国内的IP地址的用户就重定向到国内的阿里云OSS地址下载.

1. 首先,设备端是通过http请求来下载文件的,所以我唯一可以知道的是设备端连接过来的remoteaddr 地址.
2. 设个时候我就可以通过remoteaddr 地址去判断用户的设备到底处于国内还是国外,因为用户的设备有可能是移动的
3. 这个时候就找到了一个淘宝的IP地址库查询接口:http://ip.taobao.com/ipSearch.php
4. 就根据这个区请求查询IP地址的位置,然后做相应的地址重定向
5. 存在的问题,淘宝IP地址库的查询请求是有频率限制的,所以会存在频繁查询查询失败的情况,这个时候是默认跳新加坡的,因为我们主要的客户在国外

好了一下说正事~

淘宝的IP库,看起来就是给出了比较详细的信息:

这个时候,我就像做一个我自己的地址库,然后让别人来查,看了下,上面有的信息,这时候网上了查了下,好像可行,就开始动手了.
需要的信息:
1. 国家, 国家代码
2. 省,省代码
3. 市,市代码
4. isp
5. IP地址库
相应的地址,在代码里面有,需要的可以看代码的请求地址

去网上搜索了一下,好像这些大概都可以找到,接下来就去爬下来就好了(无奈IP地址库的信息,现在我只找到了省级以上的地址库的信息,最后也没找全.

国家代码再维基百科上爬的

个人经验要点:
1. 爬基本的信息的时候,如果遇到整页信息的,其实可以不用http 请求,特别是想国外网站的(维基百科),不科学上网还请求不下来,这个时候就直接手动复制一下,然后读入解析就好了,我维基百科就是直接辅助文件,然后解析文件的

2. 遇到二级或者三级页面的时候,可以自己手动点击一下,然后看看页面的跳转,因为大批量类似页面的时候,有时候可能只需要改变页面的一个字符就可以直接请求了

3. 关键点在解析部分,这里我用的是python + BeautifulSoup 爬的,之前我想用go爬,却发现做正则表达式匹配的时候非常困难,然后爬了一个就改为用python了
BeautifulSoup 好像可以直接过滤掉&nbsp这类的字符,然后有很多的接口可以直接调用,获取到title 之类的html 标签,很方便

4. 当爬到纯文本的时候,这个时候要读取行或者列的时候,用字符串的分隔,分成数组,来挑选其中需要的项,我觉得这样是比较方便的。

5. 注意请求头要加一下一些基本的http 请求头信息,否则有的网站会识别,然后不会回应你.

6. 封装请求html 下载页面内容的方法,再解析想要的内容,存入数据库即可。

7. 服务部分就可以直接写服务,读取相应的数据库,查询,提供服务即可。

golang reflect 测试

Intellj IDEA 配置go 开发环境

1. 下载安装版本go 1.8

2. 按照提示下一步下一步安装好 go 后,应该是在C:\Go 目录
3. 可以在cmd 命令行$go 试试看能不能答应出usag
4. mac 可以使用homebrew 安装,安装完后应该是在homebrew 下的Celler 下面
5. 配置gopath 目录指向一个你用于存放go 源码、包、可执行文件的目录,
并且go 强制要求在此目录下简历src bin pkg目录存储相关的go 源码文件和包文件
当你使用go get github.com/urlshor…..之类的包的时候就会存储在这些src 目录下了
6. 下载安装intellj IDEA , 地址:http://www.jetbrains.com/idea/
激活可以使用licenseServer 激活,server可以使用:http://idea.iteblog.com/key.php

7. 启动idea ,并在config中找到plugins ->browse repositories中输入go 安装go language
8. 新建项目 配置go sdk 选择你安装go的目录,也就是那个C:\Go 目录
9. 编写go 代码
#10. 关于包的管理,IDEA 强制包名同目录名,如果你想建立一个package在本地,然后main 包引用
那么你需要建立相应的目录在src 目录中,然后通过import “./packagename” 引入

那个谁,请收下33-2017年的目标!

前几天在订阅号读了一个三十岁妈妈写的《自律真的可以改变人生》。

文中的她坚持了两年,从2015年到2016年。列目标,列计划,坚持,坚持。最后都实现了。再看看自己,在这世上活了24年,没有自己明确的目标,很多“我想要……”都停留在了空想里,随着时间一天天逝去,最后变成了泡沫。

昨天,跟LGM聊天说起自己2017年的目标。他说,把它们全部详细地写下来,发给他,他监督。还叫我自觉点。我也了解自己—严重的拖延癌患者!

目标不止是停留在口边的,还要具体地行动!

SO,我现在列下2017年的目标:

1、稳定工作

回想起2016年,本人过得有些浑噩:纠结、辞职、找工作、纠结……各种蠢事都在2016下半年做过了。不过,也正因为这些黑暗史让我自己学会了思考,学会了面对,学会了对自己负责。

LGM说,现在准备下简历,年后可以考虑换工作的机会。

我听了回他“你居然支持我换工作了!我感动啊!你以前都不理我!”

他说,“工作,干什么都是干,有机会的时候就可以考虑了。我考虑的是什么时候该换,什么时候不该换!哪里不理你,工作的时候都在想着怎么关心下你。”

听了后心里暖暖的。(此处好想给他一个感动的大哭脸,呜呜呜呜……)

说到稳定工作,这范围有些大。工作哪有什么稳定得下来的,重要是稳定自己。之所以选择现在的工作也就是为了有更多的时间做自己的事情—看书考公务员事业单位。给自己的一次机会,做什么都得有舍。

2、考证

大学没有好好学习考些证,毕业后出来发现有些证也能成你生活的饭碗。目标:考网络工程师证、教师资格证、会计从业资格证(后两个证也不知道为什么而考,只是觉得大学时喊了那么久,现在没得到,感到遗憾。)

3、学PHP,做一个网站。

LGM说,这目标说得太大了,有些含糊,不够详细。我所想的网站主要是资讯型的网站。目前想到的这个网站放自己的东西,具体栏目功能还在思考构造中……

现在我也才刚刚起步PHP语言,离这个目标还有好远的距离。

4、读33本书

对别人来说,一年读33本书挺少的了。但是对于我这个渣渣来说,真的是好多了。因为我长这么大,一年都没好好读过一本书。之前办了区图的借书卡,现在可以用上了。33,也是自己喜欢的数字。

5、跑1000公里

南湖公园一圈大概8.37公里,一年365天中的120天去跑一圈。恩,这是说得容易,做起来也容易的一件事。对我来说,行动出发、坚持是很难的。

6、来一次说走就走的旅行

我想到的终点有:厦门、重庆至四川。

 

这是2017年的六个大目标了,那个谁,请收下!

接下来,就是行动!!!

 

 

How to configure and make a open source code

How to make a open source code

        或许我们经常会遇到这样的问题,就是如何去把我们使用到的一个open source 的code 放入自己的代码库,方便自己的编译,有多方便呢?就是当新人来的时候,可以不用这里找找,那里改改。当服务器突然被某个新手一不小心搞挂的时候,重新搭建服务器后,依旧可以快速顺利的编译完整个工程代码.(我记得我那时候是小白的时候也曾三次搞挂公司编译服务器.然后每次重新装一次编译服务器都要搞个半天一天的,还被骂.

以下是我编译的经验.

1. 如果你要新加入一个open source 的code,那么你可以新建一个open source 的code相关的目录,一般就直接建成open source的名字就好了,记得不要加任何版本相关的信息.

2. 把下载下来的 open source XXXX.tar.gz 的原始包放进目录,然后解压文件.

3. 在 自己建立的目录加一个Makefile 作为自己的编译,所有你需要配置的,clean  install  distclean 的选项都从新自己写一遍.

4.  这时候在现有的Makefile 中编写configure 的脚本,当然我们每次git clone code 的时候,可能每台机器,或者自己的目录都不一样,这时候可能在自己这台机器配置完的,然后git push上去仓库的代码,再别人那里又编译不过了,所以configure 最好是每次git clone code的时候都做一次配置,确保每台机器都是更加机器的现有配置来配置open source code, 但是还有一个问题就是,我们自己git clone 代码的时候,应该配置完一次后,第二次则不应该再重新配置,除非使用make distclean 清楚配置后. 这里我们可以根据open source code 目录下面是否有Makefile 文件来判断是否进行configure ,因为很多的open source code Makefile是动态生成的.

5. 每个我们编译的open source code 基本都是默认配置在用户编译的机器使用,所以采用的编译选项和安装选项基本都是x86 的配置,这时候如果你做的是嵌入式的东西,使用到交叉编译记得配置使用 cross cc 交叉编译环变量,另外一个需要注意的就是配置prefix 选项,这个选项会涉及到你在make install 的时候应该安装到哪里,以及当你的程序运行时,应该在你的嵌入式环境中哪里去链接动态库, 所以这里我比较建议的是配置成自己的嵌入式环境的目录结构下,open source 运行的目录结构. 然后在你建立的目录结构中增加一个 BIN 相关的目录,在Makefile中做make install 的时候把编译的版本需要的binary 自己写cp 命令拷贝到BIN 目录下边,在打包的时候再拷贝到自己是target下面。

6. 基本编译的问题解决了,这时候可能你还会涉及到改动open source code 相关的东西. 建议大家可以首先考虑配置是否能解决(我记得我曾经就编一个rip 的时候本来可以用配置解决的,我却搞了半天想去改代码,最后发现配置一下配置文件就搞定了),如果非要改open source的代码的时候,可以先把现有的刚刚解压出来,没有编译和configure的代码先上库,然后再在Makefile中添加一个macro 宏定义 ,用宏定义包含自己要修改的代码范围,这样可以控制编译的时候编原始代码还是编译自己修改过的代码.  还有一个比较重要的问题,就是我发现很多小企业不重视LICENSE 这种问题(我个人觉得这是一个比较重要的问题,就像小米被告一样,如果一个企业要想搞大,那就必须注意license 问题,注意给出GPL ,也可以定义自己的license),如果涉及到license ,可能我们还需要在建立的目录下添加一个GPL 的目录作为编译GPL release用.

7. 然后如果要做版本升级的时候,只需要重新下载一下新版本的open source XXX.tar.gz 然后合一下你自己的改动(去查commit log),然后改动一下Makefile 编译的版本即可解决升级的问题,而且还不用创建一大堆的各种版本的目录,和配置各种版本。

8. 我给出一个我配置lighttpd 写的Makefile 做一个example:

目前我还存在的疑问:现在我编译samba的时候,我发现我配置完prefix后,编译可以通过了,但是当我做make install 的时候,install到自己的目录的时候会出错,也就是:make install DESTDIR=”samba/BIN/”
但是如果我配置prefix目录为 “samba/bin/” 的时候,我make install 的时候回正常,但是当我放进去板子跑的时候又会出现连接库文件的时候找不到,出现运行出错.

目前这个问题我还不知道怎么解决,还期待有人可以指导指导这样的问题该怎么配置会比较好。

写得不对的欢迎拍砖.
本文章版权归作者所有,如有转载,请注原始出处,并通知作者.

1 2 3 4 20