Java爬取简单的网页内容和图片
根据java网络编程相关的内容,使用jdk提供的相关类可以得到url对应网页的html页面代码。
针对得到的html代码,通过使用正则表达式即可得到我们想要的内容。
比如,我们如果想得到一个网页上所有包括“java”关键字的文本内容,就可以逐行对网页代码进行正则表达式的匹配。最后达到去除html标签和不相关的内容,只得到包括“java”这个关键字的内容的效果。
从网页上爬取图片的流程和爬取内容的流程基本相同,但是爬取图片的步骤会多一步。
需要先用img标签的正则表达式匹配获取到img标签,再用src属性的正则表达式获取这个img标签中的src属性的图片url,然后再通过缓冲输入流对象读取到这个图片url的图片信息,配合文件输出流将读到的图片信息写入到本地即可。
爬虫除这两种玩法外,还有着许多的应用,比如还可以爬取一个网页上所有的邮箱、电话号码等等。
运行效果:
这些内容是我从csdn首页中根据“你”这一个关键字得到的。
这些是我从一些网站得到的图片
问题:
在看似没有问题的爬取代码背后其实还是存在着许多问题的,该程序只是对爬虫最初级的应用。比如我发现部分内容的html在浏览器的“检查”功能中明明存在,但是在网页源代码中就没有了相关的内容。还有文本匹配的正则表达式部分也存在问题。
在img src属性中,有部分图片的url是不带协议的(如:https://),还有部分图片的url是不带图片后缀(jpg、png、gif...)的。前者导致程序无法解析这个url,后者导致无法给下载的图片统一采用原命名。
有时匹配到的img src值还会出现非图片url的情况。还有时从页面上获取到的内容是unicode编码值。以及部分网站做了反爬虫处理等...
以上问题因为我对java知识、web知识、网络知识还有正则的知识了解的很少,所以我目前都无法解决。
这些问题就导致最后真正从网页上爬下来的内容,只是原网页很少的一部分。
我相信在以后这些问题都是会被逐个解决的。
另外我在程序中使用了多线程的功能,以达到可以在多个网页“同时”爬取的效果。
下面给出该程序的源代码。
编译环境:
windows jdk 9 idea
代码:
//Main.java 主类
package
//DownloadPictures.java 爬取图片类
package
//GetTest.java 爬取文本内容类
package
----
程序中还存在着许多问题,还请多多包涵。