如下是咱們軟工小組關於網絡爬蟲部分代碼的的說明文檔。至於一些分功能的小函數或方法就不在此贅述,一看就能明白。下面就主要的函數進行說明。php
從整體上來講主要有三部分:店家信息爬取部分,菜品信息爬取部分,數據庫部分。下面就三個部分一個一個說明。java
整個程序是用java實現的,因此數據庫部分主要由兩個類Db.java和Dbop.java組成。正則表達式
Db.java主要提供數據庫的接口,包含以下:數據庫
static { json
try {api
Class.forName(dbClassName);//加載驅動服務器
} catch (ClassNotFoundException e) {網絡
// TODO Auto-generated catch blockapp
e.printStackTrace();函數
}
}
public static Connection getDbConnection() {//創建到MySQL的鏈接
try {
conn = DriverManager.getConnection(DbHost, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
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)
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兩個類。他們分別是將爬蟲的菜品信息爬取和店家信息爬取部署到服務器上實現爬蟲程序的定時運行,實現了數據的定時自動更新。
* 基於 Zend Framework 編碼規範
一、縮進爲一個 Tab 或者 4 個空格,按層次縮進。
二、require/require_once 以及 include/include_once 統一使用標準調用寫法,好比:
require_once 'Hush/Page.php';
require_once 'Hush/Db.php';
三、通常類庫的名稱必須以 ZF 方式的命名,好比:Path_To_Class
除開特殊的 Page 類、Service 類以及 Dao 類文件,他們的命名規則分別以下:
Dao 類:Database_Tablename {} 類文件在 Dao 類庫目錄下
Page 類:XxxPage {} 類文件在頁面類庫目錄下
Service 類:XxxService {} 類文件在 Service 類庫目錄下
四、通常變量以及函數的名稱以駱駝命名法(首字母小寫),好比:
$variableName = 1;
public function methodName()
而 private/protected 變量或函數以 _ 開頭,好比:private function _methodName()
五、類聲名和函數聲名後的第一個 { 符號換行,好比:
Class_Name
{
public function methodName ()
{
// TODO : method process
}
}
六、每一個文件頂部必須有該類的說明註釋,好比:
<?php
/**
* XXX Dao
*
* @category XXX
* @package XXX_Dao
* @author zmpy
* @version $Id$
*/
七、每一個類文件前必須有類定義說明,好比:
...
/**
* @abstract
* @package XXX_Dao
*/
class XXX_Dao
{
...
八、被調用類庫文件函數名前必須有說明註釋(頁面類可省略,由於基本不會被調用),好比:
...
/**
* 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
}
...
九、被調用類庫文件後面的 php 結束符 ?> 可不用寫。要寫也能夠,可是結束符後不要加任何字符。
一、縮進爲一個 Tab 或者 4 個空格,按層次縮進。
二、包命名以com.app.takeout爲前綴。包名的後續部分根據不一樣功能各自命名規範而不盡相同。但均爲小寫字母。
三、通常變量以及函數的名稱以駱駝命名法(首字母小寫),好比:
variableName = 1;
public void methodName()
五、layout 命名
layout xml 的命名必須以 所有單詞小寫,單詞間如下劃線分割,而且使用名詞或名詞詞組,即便用 模塊名_功能名稱 來命名。
六、id 命名
layout 中所使用的id必須以所有單詞小寫,單詞間如下劃線分割,而且使用名詞或名詞詞組,而且要求可以經過id直接理解當前組件要實現的功能。
七、資源命名layout中所使用的全部資源(如drawable,style等)命名必須以所有單詞小寫,單詞間如下劃線分割,而且儘量的使用名詞或名詞組,即便用 模塊名_用途 來命名。若是爲公共資源,如分割線等,則直接用用途來命名