• 网络爬虫文档

以下是我们软工小组关于网络爬虫部分代码的的说明文档。至于一些分功能的小函数或方法就不在此赘述,一看就能明白。下面就主要的函数进行说明。

从总体上来说主要有三部分:店家信息爬取部分,菜品信息爬取部分,数据库部分。下面就三个部分一个一个说明。

数据库部分

整个程序是用java实现的,所以数据库部分主要由两个类Db.java和Dbop.java组成。

Db.java主要提供数据库的接口,包含如下:

      • 静态加载数据库驱动

static {

try {

Class.forName(dbClassName);//加载驱动

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

      • 建立到MySQL的连接,即建立到数据库的连接

public static Connection getDbConnection() {//建立到MySQL的连接

try {

conn = DriverManager.getConnection(DbHost, user, password);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

      • 关闭到MySQL的连接,即关闭到数据库的连接

public static void closeDbConnection(Connection connection) {//关闭数据库MYSQL

if (connection != null) {

try {

if (!connection.isClosed()) {

connection.close();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

Dbop.java主要提供数据库的操作,包含如下:

      • 将爬取的店家信息存入数据库

public static void InsertToStoreDb(long id,String StoreUrl,String StoreName,String LogoUrl,

int DeliveryTime,String Opentime,int Quantity,String Sale,String location,String lng,String lat)

      • 清空店家信息表

public static void clearStore()

      • 清空菜品信息

public static void clearProduct()

      • 将爬取的菜品信息存入数据库

public static void insertToProductDb(long product_id,String product_name,String product_img,int price,String sold_quantity,String left_quantity,long store_id,String store_name,String lng,String lat,int delivery_time)

      • 从数据库中取出店家名字

public static String getStoreName(int id)

      • 取出送餐时间

public static String getStoreDeliveryTime(int id)

      • 取出店家所在位置的经度

public static String getStoreLng(int id)

      • 取出店家所在位置的纬度

public static String getStoreLat(int id)

店家信息爬取部分

这一部分主要是从饿了么网页上爬取店家相关的信息存入数据库。

首先是Storeurl.java

      • 实例化网页分析器

public void createParser(String url) throws ParserException

      • 重置网页分析器

public void resetParser()

      • 爬取并将爬取的数据存入数据库(总函数)

public void crawlerToDb()

      • 根据分析网页找到的节点进行信息提取

public void parserMethod(String url)

      • 根据找到的特定节点提取店家链接和店家logo(后面还有相同的函数用于提取其他信息,就不一一赘述)

public void getStoreUanal(NodeFilter url,NodeFilter img,Parser parser) throws ParserException{//get store url and name and logo

其次是GetLungAndLat.java

      • 百度提供的一个接口,用于查询地址的经纬度

public static String getCoordinate( String st)

{

String str= new String();//从服务器端获取的数据转换为字符串形式

String url = "http://api.map.baidu.com/geocoder/v2/?address="+st+"&output=json&ak=DWDtiXpQ9UBnnkwXmpoYYxLs";

try{

HttpGet request = new HttpGet(url);

HttpResponse response = HttpClients.createDefault().execute(request);

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK)

str=EntityUtils.toString(response.getEntity());

}catch(Exception e)

{

e.printStackTrace();

}

return str;//.replace(' ', ',');

}

      • 从百度提供的接口查询到的结果中分别提取经度和纬度。

public static String getLnAndLa(String address)

      • 利用正则表达式处理出错的查询结果,主要用于查询提取经纬度时使用。

public static String special(String address)

菜品信息爬取部分

这个则主要根据前面爬取的店家信息中店家链接爬取相应店家的菜品信息,主要是product.java。具体如下:

      • 根据相应爬取分析得到的菜品数据存入数据库(主函数)

public void crawlerToDbproduct()

      • 判断是否该店家的信息是否已经爬取并存入数据库,如果已经存入数据库,则不进行爬取,否则进行爬取。

public static boolean ifExist(List<String> usedlink,String url)

      • 根据提供的店家链接进行相应的信息提取

public void parserMethod(String url)

      • 根据网页分析器找到的节点提取店家名字(后面有很多相似的分程序,一看就明白,就不在次赘述)

public void getProductName(NodeFilter n,Parser parser) throws ParserException

到此,整个爬虫程序的主体部分已经说明清楚。

优化部署部分

这部分主要是后期在优化程序和部署程序时对原程序做的修改,主要包括ProductTime.java和StoreTime.java两个类。他们分别是将爬虫的菜品信息爬取和店家信息爬取部署到服务器上实现爬虫程序的定时运行,实现了数据的定时自动更新。

  • 服务端文档

服务端文档借助phpdoc工具自动生成齐全文档。

  • 客户端文档

客户端文档借助javadoc文档自动生成齐全文档。

  • 服务端代码规范

* 基于 Zend Framework 编码规范

1、缩进为一个 Tab 或者 4 个空格,按层次缩进。

2、require/require_once 以及 include/include_once 统一使用标准调用写法,比如:
require_once 'Hush/Page.php';
require_once 'Hush/Db.php';

3、一般类库的名称必须以 ZF 方式的命名,比如:Path_To_Class
除开特殊的 Page 类、Service 类以及 Dao 类文件,他们的命名规则分别如下:
Dao 类:Database_Tablename {} 类文件在 Dao 类库目录下
Page 类:XxxPage {} 类文件在页面类库目录下
Service 类:XxxService {} 类文件在 Service 类库目录下

4、一般变量以及函数的名称以骆驼命名法(首字母小写),比如:
$variableName = 1;
public function methodName()
而 private/protected 变量或函数以 _ 开头,比如:private function _methodName()

5、类声名和函数声名后的第一个 { 符号换行,比如:
Class_Name
{
public function methodName ()
{
// TODO : method process
}
}

6、每个文件顶部必须有该类的说明注释,比如:
<?php
/**
* XXX Dao
*
* @category XXX
* @package XXX_Dao
* @author zmpy
* @version $Id$
*/

7、每个类文件前必须有类定义说明,比如:
...
/**
* @abstract
* @package XXX_Dao
*/
class XXX_Dao
{
...

8、被调用类库文件函数名前必须有说明注释(页面类可省略,因为基本不会被调用),比如:
...
/**
* Load data by primary key id
*
* @param mixed $id Primary key value
* @param string $pk Primary key name
* @return array
*/
public function methodName ()
{
// TODO : method process
}
...

9、被调用类库文件后面的 php 结束符 ?> 可不用写。要写也可以,但是结束符后不要加任何字符。

  • 客户端代码规范

1、缩进为一个 Tab 或者 4 个空格,按层次缩进。

2、包命名以com.app.takeout为前缀。包名的后续部分根据不同功能各自命名规范而不尽相同。但均为小写字母。

3、一般变量以及函数的名称以骆驼命名法(首字母小写),比如:
variableName = 1;
public void methodName()

5、layout 命名
layout xml 的命名必须以 全部单词小写,单词间以下划线分割,并且使用名词或名词词组,即使用 模块名_功能名称 来命名。

6、id 命名
layout 中所使用的id必须以全部单词小写,单词间以下划线分割,并且使用名词或名词词组,并且要求能够通过id直接理解当前组件要实现的功能。

7、资源命名
layout中所使用的所有资源(如drawable,style等)命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,即使用 模块名_用途 来命名。如果为公共资源,如分割线等,则直接用用途来命名

sixsix团队“餐站”应用代码规范及开发文档的更多相关文章

  1. sixsix团队“餐站”应用M2阶段发布报告

    一.新功能 客户端 搜索功能 我们在M2中实现了对地点的搜索菜品,可以直接在主页页面中的输入框输入用户喜欢的菜品,系统将返回与对应关键字所对应的选择,更加高效直观的满足客户的口味. 菜品图片加载 我们 ...

  2. 为了增强团队的协作和高效开发,提升代码质量,TGideas团队一起制订的代码规范。主要包括五部分内容:PC规范、移动端规范、性能优化、CP规范、其他项目规范

    http://tguide.qq.com/main/index.htm

  3. 《团队-手机app便签-开发文档》

    项目托管平台地址:https://github.com/Vcandoit/Notepad.git 我主要负责文件存储部分,文字部分使用sqlite保存. 因为我们想实现备忘录记录照片.语音的功能,所以 ...

  4. Forward团队-爬虫豆瓣top250项目-开发文档

    项目地址:https://github.com/xyhcq/top250 我在本次项目中负责写爬虫中对数据分析的一部分,根据马壮分析过的html,我来进一步写代码获取数据,具体的功能及实现方法我已经写 ...

  5. 《Forward团队-爬虫豆瓣top250项目-开发文档》

    码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...

  6. 前端规范之JS代码规范(ESLint + Prettier)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...

  7. 项目Alpha冲刺(团队)-代码规范、冲刺任务与计划

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:SkyReach 作业目标:确定团队项目的代码规范.冲刺任务与计划 代码规范:隐流 ...

  8. 腾讯Alloy团队代码规范

    概述 我个人很看重代码规范,因为代码是写给别人看的,按规范写别人才更容易理解.之前苦于没有代码规范的资料,现在在github上面看到了腾讯Alloy团队的代码规范,于是学习了一下,并记录下我自己还没怎 ...

  9. 团队开发前端VUE项目代码规范

    团队开发前端VUE项目代码规范 2018年09月22日 20:18:11 我的小英短 阅读数 1658   一.规范目的: 统一编码风格,命名规范,注释要求,在团队协作中输出可读性强,易维护,风格一致 ...

随机推荐

  1. C#中的console类输入输出功能

    Console.WriteLine() 直接将括号内内容显示在控制台界面中(相当于C语言printf()吧) Console.ReadLine()获取控制台用户自己输入的内容(功能和C语言scanf( ...

  2. git 一些基本的命令操作总结

    配置远程仓库:git remote add test http://xxxx/tool/device_management.git test为远程仓库别名克隆远程仓库到本地:git clone htt ...

  3. Lua与C交互之基础操作(1)

    @(语言) Lua是一个嵌入式的语言,可以Lua可以作为程序库用来扩展应用的功能,也可以注册有其他语言实现的函数,这些函数可能由C语言(或其他语言)实现,可以增加一些不容易由Lua实现的功能.这就是L ...

  4. 简易 Token 验证的实现

    简易 Token 验证的实现 前言 在我们的服务器和客户端的交互中,由于我们的业务中使用 RESTful API 的形式和客户端交互,而 API 又是无状态的,无法帮助我们识别这一次和上一次的请求由谁 ...

  5. 反转链表的golang实现

    问题:反转一个单链表. 输入: ->->->->->NULL 输出: ->->->->->NULL 首先先认识一下链表这个数据结构: 链表节 ...

  6. 【BZOJ4259】残缺的字符串

    [BZOJ4259]残缺的字符串 Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时, ...

  7. win10搭建ftp服务器的操作方法【图文教程】

    我们知道FTP是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.对于win10版本的ftp服务器搭建方法可能有部分用户还不是很清楚,下面这篇文章就是关于win10搭建ftp服务器的 ...

  8. Python高级网络编程系列之第三篇

    在高级篇二中,我们讲解了5中常用的IO模型,理解这些常用的IO模型,对于编写服务器程序有很大的帮助,可以提高我们的并发速度!因为在网络中通信主要的部分就是IO操作.在这一篇当中我们会重点讲解在第二篇当 ...

  9. yum问题解决

    错误信息1:There was a problem importing one of the Python modulesrequired to run yum. The error leading ...

  10. Hibernate validator使用和自定义validator及整合Spring MVC

    http://blog.csdn.net/lwphk/article/details/43983669 Hibernate validator使用 导入validation-api-xxx.jar 以 ...