Category: Blog my Blog

  • 天助自助者

    这世间,几乎所有的事情,都需要自己主动去做,才可能做成。

    主动,除了包括思想,最最主要的,是包括行动。

    这两天正在整理抖音短视频小航海的一个比较成功的财友的小航海总结,里面他就写到了这么一块:天助自助者。

    他的总结是:我总会觉得这一路上都有人愿意帮助我,现在回头看来还是受益于生财的价值观:真诚、利他、主动、开放、空杯。我认为我做到了,所以会有磁场把我和这些人联系起来。

    这验证了一句话,真诚起来,强大起来,所有的财富、资源都会紫东向你聚集。

    由此反思自己,以前总觉得自己空杯心态足够,其实来西安这半年多来,自己的空杯心态远远不够,也不够主动,哪怕看到了一些眼前的机会,但是总感觉自己没有修整过来,总是提不起干劲。

    其他的几项,更是相去甚远。

    这几天也是终于其他的事情有了一个大致的收尾,节奏和状态调整回来一些,另外制作了一个坚持写作输出一百天的计划,目前执行的还可以,大概也正是执行这个计划,让自己的节奏开始正确了起来。

    从身边的小事开始,训练强化自己的执行力,弱化自己的懈怠、自满,让自己从思想上和行动上,都步入正轨。

  • 爬虫爬取某菠菜网站结果

    查看网站,结果在外边没有,需要用正式用户或者游客身份登录之后才能拿到
    登录之后,查看请求内容,发现只有一个get的请求是主要数据,但是整个是页面,不是单独的数据
    摘出来链接:/member/dresult?lottery=AULUCKY5&date=*&table=1
    写爬虫的时候需要替换这里的日期

    用熟悉的语言,java写,因为后续还需要做成服务,做服务的时候,java也比较顺畅

    使用原来写的httpUtil爬取,发现从网站拿来的header有的不能用,搜了一下,是http2里可以自定义的key,比如key使用冒号开头
    // :method: GET
    // :path: /member/dresult?lottery=AULUCKY5&table=1&date=2018-01-01
    使用java自带的http请求会无法携带这些自定义的header
    查资料,发现jdk8处理http2略微有些麻烦,直接使用支持http2的jdk版本比较方便。到oracle上去下载。下载了16.

    下载成功之后,安装,整个环境的参数已经被修改,执行java -version 显示是jdk16了。

    使用开发工具idea增加仓库,发现总是报无法识别的仓库地址。想了一下,好像是因为我idea比较老的原因。。。我的idea还是2017版的。。。

    没办法,这个方法得放弃了。使用另外一种方式。

    修改项目依赖,增加依赖okhttp3,当前环境使用的是jdk8,直接在仓库里找了个比较新的版本

    <dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.1</version>
    </dependency>


    结果依赖的包怎么都引入不进来,根本没法实例化。
    弄了半天仍然不行,忽然想到可能也是版本的原因。

    去查了一下这个版本包发布的时间,确实是在jdk8之后很久,时间差距有点太大,可能是这个原因,切换一个比较老的版本试试。

    找了个距离jdk8发布时间比较接近的版本,

    <dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.11.0</version>
    </dependency>


    修改这个配置之后,OK了,可以实例化了。
    写个公用点的方法,可以动态添加header

    public static String getUrlContent(String urlStr, Map<String, String> headers) {
    try {
    Request.Builder requestBuilder = new Request.Builder().url(urlStr);
    headers.forEach(requestBuilder::addHeader);
    Request request = requestBuilder.build();
    Response response = client.newCall(request).execute();
    if (Objects.isNull(response)) {
    throw new IOException("Response is null");
    }
    if (!response.isSuccessful()) {
    throw new IOException("Unexpected code " + response);
    }
    if (Objects.isNull(response.body())) {
    throw new IOException("Response body is null");
    }
    return response.body().string();
    }
    catch (IOException io) {
    System.out.println("获取URL资源异常!,URL :" + urlStr);
    throw new RuntimeException("获取URL资源异常!URL " + urlStr);
    }
    }

    把从浏览器里扒出来的header都写到代码里,然后写死一个地址,尝试请求一下
    /member/dresult?lottery=AULUCKY5&date=2018-01-01&table=1

    请求成功,但是显示的是乱码。从网上找资料,有的说把gzip这个header的这一项去掉,试试。

    尝试成功,打印出来了需要的页面内容。

    按照之前跟大佬交流时候的提议,建议在爬完一些网页之后,为了避免需要重新摘取里面的数据的时候,网页出现了变化,需要重新解析,所以第一次爬完之后就把所有的爬取下来的网页直接保存成文件,后续需要用的时候,直接拿这些文件用就行了,不需要再重新去爬取,还需要处理各种外部变化问题。

    不过这次应对的网站比较简单,感觉不会有这么频繁的变化,先把数据爬下来再说。写入文件也就一步简单的操作,先写数据解析的部分。