2019 年 08 月 - 5 文章

Java网络爬虫教程 有更新!

  |   1 评论   |   316 浏览

最近准备写的系列文章,先把目录列出来,一节一节慢慢写。

目录

1. 爬虫概述

1.1 前言
1.2 规则

2. 技术基础

2.1 开发环境
2.2 Java基础
2.3 框架与类库

3. 定向采集

3.1 下载网页
3.2 下载图片与文件
3.3 Selenium

4. 信息提取

4.1 xpath解析规则
4.2 图像OCR识别

5. 数据存储

6. 高级技巧

6.1 匿名代理池
6.2 Header伪装
6.3 关键字字典
6.4 抓取进度管理

7. 实战案例

7.1 国家统计局
7.2 时光网
7.3 彩票开奖信息
7.4 代理信息
7.5 前程无忧

8. 后记

知识的高山,要如何攀登? 有更新!

  |   0 评论   |   280 浏览

现代社会是一个信息时代,是一个知识爆炸的时代,我们要如何从知识浩瀚的海洋中找到我们所需要的内容?我们要如何梳理我们的知识从而形成自己的知识体系?我们要如何以自己的知识体系指导我们的生活、工作?请带着以上问题阅读本文,相信您会有不小收获。

一、查

如何高效搜索信息,提供大量干货(搜索技巧,实用理论)

1.1 搜索引擎的使用

由于百度这个毒瘤的存在,目前中文搜索的环境信息良莠不齐,且信息孤岛现象比较严重,中文信息的搜索目前推荐以下途径:

1.1.1 中文

  1. 必应:微软推出的搜索引擎,百度的替代品。
  2. 知乎:最大的综合性中文知识社区,虽然近年来随着知乎开放注册,大量用户涌入,导致内容质量有一定下降,但是依然是不可或缺的知识社区。
  3. 维基百科中文版:综合性百科全书,中文版需要科学上网才能访问。
  4. segmentfault.com:程序员知识社区,软件开发垂直领域的佼佼者。
  5. 简书:偏小资与文艺范的社区。
  6. 搜狗|微信:这个搜索引擎可以搜索到微信公众号文章。或者您也可以打开手机微信,点击最上面的放大镜图标来搜索。
  7. 豆瓣:老牌的评价社区,图书、电影、音乐的评分已形成权威,我每次看电影基本都会查豆瓣评分,超过8分的基本不用看其他信息,直接可以买票了。

1.1.2 英文

  1. Google:全球最好用的英文搜索引擎,需要科学上网。
  2. 维基百科英文版:英文版维基不用科学上网,细思是一件挺有意思的事。
  3. Quora:英文版知乎,国内知乎查不到的可以来这里看看,需要科学上网。
  4. Stack Overflow:软件开发垂直领域的问答社区,几乎你所有的问题都能在这里找到答案。
  5. GitHub:全球最大的开(tong)源(xing)社(jiao)区(you),这里几乎能找到世界上所有的开源项目源码,没事我就喜欢逛趋势排行榜,一看就能看一天。

1.1.3 技巧

- 减号(排除)的使用

程序员社区 -csdn

4.png

正常搜索时,可以看到搜索结果中第一、第二位都是CSDN的SEO结果,下面我们使用减号关键字来试试。

5.png

CSDN的结果从中消失了。

- 搜索特定类型文件

魔兽世界 filetype:pdf

1.png
2.png

可以看到搜索结果前面都有[PDF]字样,这代表结果全都是PDF文件。

- 仅搜索某网站内容

程序 site:liuxp.me

在搜索框中输入你想查询的单词,空格后接site:网站域名。就可以仅搜索该网站内容。

3.png

可以看到搜索结果都是liuxp.me网站的内容。

1.2 专业知识获取的渠道

1.2.1 专业书籍

当你不满足于网上的一些碎片化文章,想深入学习某一个领域的知识时,你还是需要看大部头的专业书籍,来系统化深入学习。

1.2.2 知名大学慕课

目前国内外有很多知名大学开放了慕课,这对于想提高自己的朋友们来说是一个非常好的渠道,不必在通过考试入学,在家就能学习到全球一流大学的课程,这在过去是不可想象的一件事情。

1.3 一些小众的内容

这里推荐一些我最近正在看的比较小众的内容:

  • 稚嫩的魔法师:历史系的高材生,以游戏的形式讲解历史,代表作有《抗日神剧》、《不列颠统治者的日常》、《梁山海贼王》等视频作品,目前正在更新《拿破仑和他的小伙伴》。
  • 攀缘的井蛙:写了《地球演绎》系列文章,讲述从地球形成一直到人类出现的生命演化进程,语言风趣幽默,考据详实,非常值得一看,目前还在连载,我正在追更。

二、体

2.1 知识的组成

首先,让我们看一张图,这张图描绘了知识的4个组成部分。

知识体系
  • 技能:指掌握并能运用专门技术的能力。技能是最初级的知识,但又是我们赖以生存必不可少的知识。一个人可以不懂得方法论、没有思想,但是他不能不会任何专业技能。厨艺、编程、驾驶、绘画、平面设计等,这些都是人的技能,人们依赖技能在社会中生存。
  • 方法论:指人们在掌握多种技能并深入钻研之后抽象出的解决某一类问题的理论。
  • 思想:思想来自于从社会实践到方法论的反复过程中,将各种专业技能、方法论融会贯通,形成一个体系,名为思想。
  • 元知识:用来学习知识的知识,我称之为元知识,例如你现在看的这篇文章,就属于元知识。

2.2 知识的管理与梳理

要管理与记录知识,首选要选择一个趁手的工具,我这里推荐印象笔记,当然你也可以使用有道云笔记等其他产品。

6.png
上图是我目前使用印象笔记的情况。

随着时间的积累,笔记的内容也越来越多,印象笔记的搜索功能非常好用,可以全局搜索,甚至可以搜索到你上传的附件(word、pdf等)内容。

而要将知识分门别类梳理清晰,只有印象笔记并不足够,我这里再向大家推荐思维导图。

思维导图我使用的是XMind,这个软件有免费版和收费版,我们非专业使用免费版本即可。

技能树.png

这是我两年多以前根据自己的实际情况做的思维导图,最近有点懒了没更新~

通过给自己画思维导图,可以更清楚的认识自己,深化专长,扩展知识面,成为一个一专多能的T型人才。

抽取共同的部分形成抽象知识,也就是方法论。这一类/方面的事情工作的通用法则与解决办法,达到触类旁通。

三、用

普通人的大脑就像一个杂乱无章的储藏室,所有有用的、无用的知识凌乱的存在其中。我相信很多人都有过这样一种体验,当需要回忆起一个事情/知识的时候,怎么也想不起来,而当不需要它的时候,又会时不时的蹦出来干扰你,这就是知识没有形成体系的恶果。

而一旦我们的知识形成了体系,那我们使用它的时候就像翻阅一本排版工整带目录的厚重书籍,就算是冷门不常用的知识,也会迅速找到。

而当我们抽象出方法论形成核心思想后,我们的大脑就像一个搜索引擎,根据输入的关键字可以迅速定位需要的知识,并且可以关联出类似的知识,从而优雅的解决问题。

Knowledge is power。——Francis Bacon!

从wordpress迁移到b3log - solo 有更新!

  |   4 评论   |   808 浏览

前提条件

  1. 首先安装好solo,创建用户保证可以访问。
  2. 确保wordpress数据库与solo数据库可以同时访问。

执行脚本

以solo数据库为访问库,wordpress数据库被我命名为wp了,如果命名不一致,将wp改为你的wordpress数据库名即可。

导入文章表数据

INSERT INTO b3_solo_article

SELECT
	posts.id AS oId
	,posts.post_title AS articleTitle
	,'' AS articleAbstract
	,'' AS articleAbstractText
	,(SELECT
			group_concat(terms.name)
		FROM
			wp.wp_terms terms,
			wp.wp_term_relationships rs
		WHERE
			terms.term_id = rs.term_taxonomy_id
		AND rs.object_id = posts.ID
		GROUP BY rs.object_id ) AS articleTags
	,(select oId from b3_solo_user LIMIT 1) AS articleAuthorId
	,0 AS articleCommentCount
	,0 AS articleViewCount
	,posts.post_content AS articleContent
	,concat('/articles/',year(posts.post_date),'/',LPAD(month(posts.post_date), 2, 0),'/',LPAD(DAY(posts.post_date),2,0),'/',posts.id,'.html') AS articlePermalink
	,0 AS articlePutTop
	,concat(unix_timestamp(posts.post_date),'000') AS articleCreated
	,concat(unix_timestamp(posts.post_date),'000') AS articleUpdated
	,RAND() AS articleRandomDouble
	,1 AS articleSignId
	,1 AS articleCommentable
	,'' AS articleViewPwd
	,'https://img.hacpai.com/bing/20180320.jpg?imageView2/1/w/1280/h/720/interlace/1/q/100' AS articleImg1URL
	,(CASE WHEN posts.post_status = 'publish' THEN 0 ELSE 1 END) AS articleStatus
FROM
	wp.wp_posts posts
WHERE posts.post_parent = 0
AND posts.post_type != 'nav_menu_item'
AND posts.post_type != 'page'

导入存档日期表数据

INSERT INTO b3_solo_archivedate
SELECT DISTINCT
	concat(
		unix_timestamp(
			str_to_date(
				concat(
					YEAR (posts.post_date),
					'-',
					LPAD(MONTH(posts.post_date), 2, 0),
					'-01'
				),
				'%Y-%m-%d'
			)
		),
		'000'
	) AS oId
	,concat(
		unix_timestamp(
			str_to_date(
				concat(
					YEAR (posts.post_date),
					'-',
					LPAD(MONTH(posts.post_date), 2, 0),
					'-01'
				),
				'%Y-%m-%d'
			)
		),
		'000'
	) AS archiveDate_oId
FROM
	wp.wp_posts posts
WHERE
	posts.post_parent = 0
AND posts.post_type != 'nav_menu_item'
AND posts.post_type != 'page'

GROUP BY concat(
		unix_timestamp(
			str_to_date(
				concat(
					YEAR (posts.post_date),
					'-',
					LPAD(MONTH(posts.post_date), 2, 0),
					'-01'
				),
				'%Y-%m-%d'
			)
		),
		'000'
	)

导入存档-文章关联表数据

INSERT INTO b3_solo_archivedate_article
SELECT
	posts.id AS oId,
	concat(
		unix_timestamp(
			str_to_date(
				concat(
					YEAR (posts.post_date),
					'-',
					LPAD(MONTH(posts.post_date), 2, 0),
					'-01'
				),
				'%Y-%m-%d'
			)
		),
		'000'
	) AS archiveDate_oId,
	posts.id AS article_oId
FROM
	wp.wp_posts posts
WHERE
	posts.post_parent = 0
AND posts.post_type != 'nav_menu_item'
AND posts.post_type != 'page'

导入标签表数据

INSERT INTO b3_solo_tag
SELECT
	term_id AS oId,
	name AS tagTitle
FROM
	wp.wp_terms

导入标签-文章关联表数据

INSERT INTO b3_solo_tag_article
SELECT
	CONCAT(object_id,term_taxonomy_id) AS oId,
	object_id AS article_oId,
	term_taxonomy_id AS tag_oId
FROM
	wp.wp_term_relationships

完成