java程序员菜鸟进阶(八)分享一个爬取B2B网站信息的程序

news/2024/5/8 23:36:31/文章来源:https://blog.csdn.net/iteye_21202/article/details/82481316


前段时间,女朋友如愿以偿的找到了销售的工作,第一天正式上班还挺高兴,第二天就开始愁眉苦脸了。就是因为他这销售实在是太麻烦,以后每天要到一些B2B网站去找一些客户信息,每天要找几百条,刚开始我还安慰的说,没事,以后我帮你找,我接手这工作第一天还很老实,第一天用了不到一个小时的时间帮忙找了八十条,但到了第二天我也烦了,太枯燥了。瞪得眼珠子都疼,突然想想,我堂堂苦逼程序员,今天竟然做这种枯燥重复性的工作!对啊,咱是苦逼程序员啊。程序员怎么能总做这些重复的工作呢。这种重复性的工作让代码来做就好了。说干就干,终于研究了两天的时间写了一个类似小爬虫的工具来爬取这些B2B网站的信息。虽然功能很简单,技术含量也不高,但想想怎么也是一个小工具,分享出来,也许大家以后会用到。OK,项目背景介绍完毕,下面开始分享程序的详细信息。

首先写一个获得页面源码的方法:

// 通过url和postdata获取返回值。该函数为主要函数可以copy使用返回值为一个Html页面的数据。
public static String GetResponseDataByID(String url, String postData) {
String content = null;
try {
URL dataUrl = new URL(url);
HttpURLConnection con = (HttpURLConnection) dataUrl
.openConnection();
// System.out.println(con.getResponseCode());
// System.out.println(con.getContentLength());
// con.setRequestMethod("POST");
// con.setRequestProperty("Proxy-Connection", "Keep-Alive");
// con.setDoOutput(true);
// con.setDoInput(true);
// OutputStream os = con.getOutputStream();
// DataOutputStream dos = new DataOutputStream(os);
// dos.write(postData.getBytes());
// dos.flush();
// dos.close();
byte d[] = new byte[4];
String line;
InputStream is = con.getInputStream();
StringBuffer stringBuffer = new StringBuffer();
Reader reader = new InputStreamReader(is, "GBK");
// 增加缓冲功能
BufferedReader bufferedReader = new BufferedReader(reader);
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line + "\n");
}
if (bufferedReader != null) {
bufferedReader.close();
}
content = stringBuffer.toString();
} catch (Exception ex) {
ex.printStackTrace();
}
return content;
}


PS:这里有必要说明一下我要爬取的B2B网站的有关内容,这些网站大都提供了一个搜索功能,在搜索框里填写上想要搜索的公司关键字就可以获得相关公司的一个列表。这里本来是想写一个可以提交POST请求然后获得提交请求后页面的源码的方法,但是在写完之后,有一部分B2B网站禁止以代理的形式提交POST的请求,所以只能改成自己手动填写搜索信息,然后把搜索到的信息列表的地址传过来,获得该页面的源码。在本工具中postdata参数无用。为了以后可以扩展,所以没有删除。Ok,这个方法就可以获得我们想要的一些公司列表了。




搜素到公司列表之后,每个公司都会对应一个url。下一步我们就要去遍历这些公司的url。打开对应公司的url后他是一个公司的介绍页面,这里面没有我想要的信息,要想得到我想要的信息必须还得打开一个“更多详细信息”链接。所以下一步我们还需获得当前页面,然后得到这个链接。对了,这里还写了一个获得一个html页面链接的方法,上面获得所有公司列表的链接也是用的这个方法。这里运用到了一个开源包htmlparser。这个东西功能挺强大的,大家以后可以研究一下。请看获得页面链接的代码,这里我有好几个地方用到,每次都有一个过滤,所以我还设置了一个标志量来区分。




public static Set<String> getHref(String f, int flag) {
Set<String> set = new HashSet<String>();
try {
Parser parser = new Parser(f);
parser.setEncoding("UTF-8");
NodeFilter filter = new NodeClassFilter(LinkTag.class);
NodeList links = new NodeList();
for (NodeIterator e = parser.elements(); e.hasMoreNodes();) {
e.nextNode().collectInto(links, filter);
}
for (int i = 0; i < links.size(); i++) {
LinkTag linktag = (LinkTag) links.elementAt(i);
if (flag == 0
&& linktag.getLink().length() > 12
&& !(linktag.getLink().substring(0, 18)
.equals("http://www.product"))
&& linktag.getLinkText().contains("济南")) {
set.add(linktag.getLink());
} else if (flag == 1
&& (linktag.getLinkText().equals("更多>>") || linktag
.getLinkText().equals("更多>>"))) {
set.add(linktag.getLink());
} else if (flag == 2 && linktag.getLinkText().equals("下一页"))
set.add(linktag.getLink());
}
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(list);
return set;
}


OK,下一步就到了我们想要信息的页面了。这里没什么技术含量。主要是用到的就是一个字符串截取和替换

public static String getPart(String source, String type) {
if (source == null)
return null;
if (source.indexOf(type) != -1) {
source = source.substring(source.indexOf(type));
source = source.substring(0, source.indexOf("</dl>"));
source = source.replace("</dt><dd>", "");
source = source.replace("</dd>", "");
source = source.replace("/p", "");
source = source.replace("\n", "");
source = source + "\r\n";
System.out.println(source);
outFile(source);
return source.trim();
} else
return null;
}


这样获得到相关信息之后,我们就可以把他输出到一个文件里面了。

private static void outFile(String source) {
try {
File file = new File("d:" + File.separator + "老婆资料.txt");
Writer out = null;// 声明字符输出流
out = new FileWriter(file, true);// 表示可以追加
out.write(source);// 写入数据
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}


为了更像一个小软件,我还做了一个swing界面,现在不得不感叹啊,我的界面做的还是依然那么的难看。代码就不上了,很简单,看一下界面吧。哈哈




开始地址即为你要从那页开始的url,因为每天所需要的信息都不一样,所以你要记住你当天弄到第几页了。最好的方法就是一次把你搜索的结果都获取完,差不多有上万条。信息数量就是你想得到的信息条数。

下面看一下爬取到的信息吧:



好了,到此基本上一些详细细节介绍完了,当然这个工具有很多不足的地方,最不足的地方就是每换一个B2B网站都需要修改代码,因为每个网站的架构都不一样,所以用不同的B2B网站都要修改代码。只是小改一下就行。他的大体步骤还是都一样的。由于时间仓促,也没注意什么编码规范问题,仅仅是简单实现功能而已。本文中仅提供了部分代码,如若想得到整个项目源码,请在下面留下您的邮箱。


PS:冯老师,我可没占用专升本的时间,这个小工具是在晚上从图书馆回来的时候写的哈,真的没占用专升本时间,我发誓。哈哈,还是非常感谢,也很感动您老每次的督促。在此表示谢意。

孙老师,最近您老跑哪去了,开学之后一直没见过你,您老是不是也爱玩躲猫猫啊。没有基友的日子真的不好过啊。哈哈。老孙同志啊,有空聚聚哈。

李某某,好好工作,脚踏实地,只要努力,天道勤筹,相信老天不会负有心人的哦。加油,我永远是你最坚实的后盾。不管以后再大的风浪,我们风雨同舟。有我的地方就有咱的小家。最后真心的感谢有你的这七年。相信以后的七十年我们会过得更幸福。


最后给天下所有的妹子说声:找个程序猿就嫁了吧。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_767031.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一个源代码浏览网站

原文&#xff1a; http://www.linuxers.cn/2010/04/23/%E6%8E%A8%E8%8D%90%E4%B8%80%E4%B8%AA%E6%BA%90%E4%BB%A3%E7%A0%81%E6%B5%8F%E8%A7%88%E7%BD%91%E7%AB%99/ 今天在逛水木linux dev版的时候发现了一个不错的网站&#xff0c;www.sooset.com &#xff0c;它可以提供在线…

[转贴] 著名社交网站LinkedIn的Java架构技术

在JavaOne 2008的会议上&#xff0c;著名社交网站LinkedIn的开发者做了2个关于LinkedIn网站的架构技术的演讲&#xff0c;目前这两个演讲的PPT已经可以下载了。下载地址如下&#xff1a; LinkedIn - A Professional Social Network Built with Java™ Technologies and Agile …

Android 开发者福利Google Developers中国网站发布

今天一早就听到各大QQ群&#xff0c;好友说Google 发布中国站点了&#xff0c;迫不及待的查看了究竟。 摘自原文 谷歌开发者公众号 我们很高兴地宣布&#xff0c;Google Developers 中国网站 (developers.google.cn) 正式发布&#xff01; 谷歌自带中文翻译&#xff0c;让我们…

网站原生app服务器安装环境,Websphere环境搭建及应用部署

3) 启动报错&#xff1a; SRVE0293E: [Servlet错误]-[null]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport报错信息&#xff1a;[13-4-9 17:23:42:960 CST] 0000002d webapp E com.ibm.ws.webcontainer.webapp.WebApp logError SRVE0293E: [Servlet错误]-[null]: com.ibm…

九度搜索引擎点击优化_seo优化快排技术是什么?靠不靠谱?

近半年来市场上充斥着大量的seo 优化快速排名的产品&#xff0c;标榜着“指定词7-15天上首页”“不上首页不扣费”“核心算法&#xff0c;稳定官网排名”等各种宣传口号&#xff0c;让人眼花缭乱。那么&#xff0c;到底有没有优化快排的技术&#xff1f;现在这些产品靠不靠谱呢…

让您的网站拥有MSDN资源库搜索功能[转摘MSDN]

方式一 在您需要添加MSDN搜索链接的地方添加以下代码&#xff1a;<script language"Javascript" src"http://www.microsoft.com/china/msdn/search/msdn_search.js"> </script>使用以上代码&#xff0c;产生的搜索样式如下图所示&#xff1a;注…

国外SEO圣经[PDF]

本文专自&#xff1a; 国外的一本经典之作&#xff0c;专业人士称为“SEO圣经”。不教你用任何作弊手段欺骗搜索引擎&#xff0c;而给你一种正确的方法&#xff0c;让你走一条seo优化的康庄大道。将你引向网络营销的成功颠峰&#xff01;这是一本世界上最有名的SEO教程&#xf…

使用 Nginx 提升网站访问速度

本文主要介绍如何在 Linux 系统上安装高性能的 HTTP 服务器 —— Nginx、并在不改变原有网站结构的条件下用 Nginx 来提升网站的访问速度。Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 …

手机网站与普通网站的区别

手机网站与普通网站有很多不同的地方&#xff0c;所以在编写手机网站时&#xff0c;有很多问题需要注意&#xff0c;需要多测试。 1. 内容优先 手机分辨率比电脑的分辨率小很多&#xff0c;所以在手机版网页上只显示最主要的内容。下图所示是携程网的首页和手机版的首页。 2. 垂…

大型网站架构演变和知识体系

(摘自http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html) 大型网站架构演变和知识体系 之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&…

HTTPS 方式访问网站

开发网页的时候&#xff0c;往往需要观察HTTP通信。 我使用的工具主要有两个&#xff0c;在Firefox中是Firebug&#xff0c;在IE中是Fiddler。但是&#xff0c;一直听别人说&#xff0c;付费软件HttpWatch是这方面最好的工具。 前几天&#xff0c;HttpWatch的官方网志刊登了一篇…

win7-VS2010-IIS网站的发布问题

前提&#xff1a;IIS配置已经完成   问题描述&#xff1a;我们在机房实验里&#xff0c;大家的都可以访问同学A发布的IIS网站&#xff0c;但是&#xff0c;A却不能访问我们每个人的网站&#xff0c;而我们也不能互相访问&#xff08;除了A&#xff09;。 问题解决&#xff1a…

大型网站--前端性能优化和规范

大型网站--前端性能优化和规范 Web性能涉及的范围太广&#xff0c;但一般web开发者在程序上线以后很多都曾遇到过性能的问题。普遍表现为页面速度开始急剧变慢&#xff0c;正常访问时间变的很长&#xff0c;或则干脆给你抛出异常错误页面。这里会涉及到很多可能发生的情况&…

网页设计-第四天-个人(个性)网站设计

个性网站设计 head 60px (50~70)banner 550px(500~600)色彩可以比企业站随意、鲜活&#xff0c;不用遵循3&#xff0c;6&#xff0c;9的原则footer 50px 小于head logo 可以设计的个性化一点&#xff0c;使用多边形&#xff0c;类似QQ登录时&#xff0c;多边形背景 使用钢笔…

网站易用性

1. 给logo添加替代文本 这样有两个好处&#xff1a;屏幕阅读器能识别logo图片代表的含义&#xff0c;图片未加载到时&#xff0c;也能告诉非视障用户那里是你的logo。 几种方法&#xff1a; <img src"logo.png" alt"前端界"> 或者&#xff0c;你用背…

【消息队列】转-大型网站架构之分布式消息队列

大型网站架构之分布式消息队列 以下是消息队列以下的大纲&#xff0c;本文主要介绍消息队列概述&#xff0c;消息队列应用场景和消息中间件示例&#xff08;电商&#xff0c;日志系统&#xff09;。 本次分享大纲 消息队列概述消息队列应用场景消息中间件示例JMS消息服务常用消…

实现网站国际化

插件&#xff1a;i18n项目管理工具&#xff1a;grunt需安装&#xff1a; grunt 和properties-reader&#xff08;i18n运行依赖&#xff09;在根目录下新建i18n文件夹&#xff0c;然后把i18n-parsers.coffee和i18n.coffee放在该文件夹(两文件在笔记最后)在js下面放**.json&#…

可视化网站教程:最流行的搭建工具及必学的7个功能

摘 要 记得刚进大学的时候&#xff0c;一位教授说大学里有十件必学的事情&#xff0c;其中有一件是&#xff1a;学会做网站。无论你是学什么的&#xff0c;像数据可视化&#xff0c;演示简历、作品或产品&#xff0c;都需要前端的知识。虽然目前有各种前端语言&#xff0c;像V…

网站变更服务器要重新备案吗,网站更换服务器要重新备案吗

网站更换服务器要重新备案吗 内容精选换一换Joomla是一套全球知名的内容管理系统&#xff0c;即Joomla CMS(Content Management System)。Joomla是使用PHP语言加上Mysql数据开发的软件系统&#xff0c;是网站的一个基础管理平台&#xff0c;适合从个人网站到各种企业网站、分类…

电脑配置太低?使用这几个网站,你的电脑软件要少装一半!

你还在为你的电脑配置太低导致软件过多而卡顿感到烦恼&#xff1f;还是电脑游戏太多&#xff0c;无法运行一些其他软件而不开心&#xff1f;其实不用难过&#xff0c;小编教你们使用一些在线网站&#xff0c;可以轻松的将你的电脑上的软件少安装一半&#xff01;你们准备好了吗…