Java网络爬虫教程 第一章 爬虫概述 有更新!

  |   0 评论   |   23 浏览

1. 爬虫概述

本章简要介绍爬虫的用途和规则。

1.1 前言

现代社会,互联网让信息获取变得简单,任何人拥有一台电脑,一根网线,上至天文地理,下至鸡毛蒜皮,无不可在互联网中查到。

有效信息对于人们来说就像空气一样不可或缺,各行各业都离不开信息的采集和加工处理,农业要抓取气象数据、农产品行情数据等信息实现精准农业,金融业需要抓取上市公司基本面和技术面作为参考。

个人更加需要各种各样的有效信息来做决策使用。每个人都可以用网络爬虫技术获得更好的生存策略,避免糟糕的未来,让自己生活的更加幸福。
比如,当我要买房的时候,我选定地区抓取大量房源,然后通过定制化的条件匹配来筛选我所需要的房源,爬虫每时每刻在工作,当出现我需要的房源时,发送微信或者短信提醒我,这时候我联系中介去看房,会大大提高我的效率,甚至能抢到一些低价房源。
再比如,我抓取了各地的招聘信息,按照地区、行业进行分析,对找工作的就业人员来说,将具有指导性意义。

本系列教程,从Java基本操作开始讲解,介绍爬虫原理,引领读者入门。然后通过讲解我自己编写的多个实战案例来帮助读者融会贯通。

1.2 规则

俗话说的好:爬虫玩的好,监狱进的早。

各位有志于数据采集事业的朋友,一定要注意遵守规则,规避风险。那么都有哪些需要遵守的规则或者说需要注意的事项呢?听我一一道来。

1.2.1 不要采集敏感信息

注意不要采集敏感信息,比如拥有保密级别的文件、商业数据等信息。

1.2.2 不要采集涉及公民隐私信息

比如公民身份证编号、照片、消费记录、医疗记录等类似信息。
本条具体内容可以参考个人信息保护标准与合规实践.pdf

1.2.3 抓取网站数据时,遵守robots.txt协议

当你想爬取某一个提供公开服务的网站的数据时,请遵守robots.txt协议,不爬取robots.txt文件中声明该网站不想被爬虫访问的部分,参考robots.txt协议

注意:如果你不能遵守以上规则,所造成的一切损失与后果自行承担,本文作者不负任何连带责任,望周知。

肉蛋菜价查查看微信小程序上线 有更新!

  |   0 评论   |   189 浏览

最近食品价格飞涨,猪肉越来越吃不起了。

特此做一个微信小程序监控食品价格,供大家买菜参考……

微信扫下图二维码即可打开:
ghc91ab57b07fb2581.jpg

程序一共提供了两个界面。

首页

首页提供四大类:肉蛋鱼、蔬菜瓜果、米面油和其他种类食品的最新价格并展示位柱状图方便对比。

点击某一个食品名称可以进入详情页面。

1zip.png

详情页

详情页面提供该食品的详细价格信息,包含采集地点,采集时间,环比、同比涨跌幅。

并提供最近12个月的历史价格数据以供参考。

2zip.jpg

目前数据来源于沈阳市物价局,更新频率为每个工作日更新一次。

以上,祝好~

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

  |   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

完成