1. 程式人生 > >爬取攜程頁面酒店資訊並且匯入到HDFS

爬取攜程頁面酒店資訊並且匯入到HDFS

這裡寫圖片描述

package com.itstar.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import
java.net.URLConnection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import com.itstar.hadoop.HdfsUtil; /** * 大資料檔案批量採集下載的工具類 * @author arry * @version
v1.0 * */
public class DataDownUtil { /** * 根據頁面的網址和網頁的編碼集來獲取網頁的原始碼 * @author arry * @param url 網址 * @param encoding 網頁的編碼集 * @return String 網頁的原始碼 * <br /><br /> * <a href="http://baidu.com" style="font-size:30px;color:red;">百度一下,你就知道 !</a> * */
public static String getHtmlResourceByURL(String url,String encoding){ // 儲存原始碼 容器 StringBuffer buffer = new StringBuffer(); URL urlObj = null; URLConnection uc = null; InputStreamReader isr = null; BufferedReader reader = null; try { // 建立網路連結 urlObj = new URL(url); // 開啟網路連線 uc = urlObj.openConnection(); // 建立檔案輸入流 isr = new InputStreamReader(uc.getInputStream(),encoding); // 建立檔案緩衝寫入流 reader = new BufferedReader(isr); // 建立臨時變數 String temp = null; while((temp = reader.readLine()) != null){ buffer.append(temp+"\n"); // 一邊讀,一邊寫 } } catch (MalformedURLException e) { e.printStackTrace(); System.out.println("網路不給力,請檢查設定。"); } catch (IOException e) { e.printStackTrace(); System.out.println("您的網路連結失敗,親稍後重試 !"); } finally{ if(isr != null){ try { isr.close(); } catch (IOException e) { e.printStackTrace(); } } } return buffer.toString(); } /** * 解析原始碼,獲取酒店資訊 * @author arry * @return List 集合 * */ public static List<HashMap<String,Object>> getImgUrl(String html){ List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>(); // 解析原始碼,找到需要下載的內容 Document document = Jsoup.parse(html); // 獲取最外層 div id="hotel_list" Element element = document.getElementById("hotel_list"); // 獲取酒店列表資訊 Elements elements = document.getElementsByClass("hotel_new_list"); for(Element ele : elements){ HashMap<String,Object> map = new HashMap<String,Object>(); // 獲取酒店圖片 String imgSrc = ele.getElementsByTag("img").attr("src"); // 酒店名稱 String title = ele.getElementsByTag("img").attr("alt"); // 酒店描述資訊 String desc = ele.getElementsByClass("hotel_item_htladdress").text(); System.out.println("圖片:"+imgSrc); System.out.println("酒店名稱:"+title); System.out.println("酒店描述資訊:"+desc); map.put("imgSrc", imgSrc); map.put("title", title); map.put("desc",desc); list.add(map); // 下載影象 getImg("http:"+imgSrc, "D:\\Windows 7 Documents\\Desktop\\Python\\project\\pic\\"); } return list; } /** * 下載網路圖片 * @author arry * @param imgUrl 網路圖片的地址 * @param filePath 伺服器儲存影象的地址 * @return void 無 * */ public static void getImg(String imgUrl,String filePath){ String fileName = imgUrl.substring(imgUrl.lastIndexOf("/")); try{ // 建立一個伺服器檔案目錄 File files = new File(filePath); if(!files.exists()){ files.mkdirs(); } // 獲取下載影象的網路連結的地址 URL urlObj = new URL(imgUrl); // 開啟網路連線 HttpURLConnection connetion = (HttpURLConnection)urlObj.openConnection(); // 獲取檔案輸入流 InputStream is = connetion.getInputStream(); // 建立檔案 File file = new File(filePath+fileName); // 建立檔案輸出流 FileOutputStream fos = new FileOutputStream(file); int temp = 0; while((temp = is.read()) != -1){ fos.write(temp); } is.close(); fos.close(); } catch(Exception e){ e.printStackTrace(); } } // Java入口 public static void main(String[] arsfddfgs){ System.out.println("親愛的同學們,大家晚上好,我愛你們 !"); String url = "http://hotels.ctrip.com/domestic/showhotellist.aspx?utm_medium=&utm_campaign=&utm_source=&isctrip=&allianceid=13963&sid=457771&ouid=000401app-&txtcity=%c9%cf%ba%a3&city=2&starttime=2017-12-06&deptime=2017-12-08&begprice=&endprice=&rooms=&hotelname=&star=&keyword=&locationid=&zoneid="; String encoding = "utf-8"; // 1. 根據頁面的網址和網頁的編碼集來獲取網頁的原始碼 String html = getHtmlResourceByURL(url, encoding); //System.out.println(html); // 3. 下載影象和內容資訊 List<HashMap<String,Object>> list = getImgUrl(html); System.out.println(list); // 4. 同步儲存在大資料hadoop中的HDFS分散式檔案系統中 } }

獲取的詳細資訊
這裡寫圖片描述

匯入到HDFS中

public class HdfsUtil{
    private static FileSystem fs = null;
    static{
        try{
            //配置檔案宣告
            Configuration conf = new Configuration();
            //配置檔案
            conf.set("fs.defaultFS","localhost");
            //通過API讀取資料
            fs=FileSystem.get(new URI("hdfs://localhost"),conf,"hdfs");
        }catch(Exception e){
            e.printStackTrace();
        }

    }

    /**
     * HDFS 快速檔案上傳 
     * @author arry
     * @throws IOException 
     * @throws IllegalArgumentException 
     * 
     */
    @Test
    public void fileUpload() throws IllegalArgumentException, IOException{

        fs.copyFromLocalFile(new Path("D:\\Windows 7 Documents\\Desktop\\Python\\project\\images\\"), new Path("/arry2018"));

    }
}

相關推薦

頁面酒店資訊並且匯入HDFS

package com.itstar.util; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io

Python旅遊行程資訊+GIS視覺化

一、需求:         爬取攜程旅行網的“北京推薦行程”首頁的各個行程文章,將各個行程所包含的景點資訊提取出來,並匯入ArcGIS進行GIS視覺化。 二、爬取思路:         爬取北京推薦行程主頁的各個文章的URL,然後通過該URL爬取出行程文章的資料

爬蟲 — 的航班資訊

功能介紹:輸入起點、終點、時間就能得到攜程上的航班資訊 程式碼: from prettytable import PrettyTable import requests import json def xiecheng(dcity,acity,date):

利用selenium酒店資訊

上節部落格我們利用requests請求庫,正則表示式來提取資訊(連結https://mp.csdn.net/postedit/81865681),提到過使用selenium也可以抓取酒店資訊,在這裡利用selenium模組優點是不需要資料處理過濾,只需要處理異常,(實際上也是一樣的效果)但是對於

python酒店資料

首先開啟攜程所有北京的酒店http://hotels.ctrip.com/hotel/beijing1 簡簡單單,原始碼中包含我們需要的酒店資料,你以為這樣就結束了?攜程的這些資料這麼廉價地就給我們得到了?事實並不是如此,當我們點選第二頁的時候出現問題:雖然酒店的資料改變了,但是我們發現

Java資料——酒店資料(二)

1.首先思考怎樣根據地域獲取地域酒店資訊,那麼我們看一下攜程上是怎樣獲得的。 還是開啟http://hotels.ctrip.com/domestic-city-hotel.html 這個地址,隨便點選一個地區進去(這裡我選取澳門作為示例),點選第二頁資料

使用requests、re、BeautifulSoup、線酒店信息並保存到Excel中

備案 info imp lis sub host write count star import requests import json import re import csv import threadpool import time, random

Scrapy桂林問答

    guilin.sql: CREATE TABLE `guilin_ask` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `question` VARCHAR(255) DEFAULT NULL COM

Python爬蟲練手小專案:窮遊網酒店資訊

Python爬蟲練手小專案:爬取窮遊網酒店資訊   Python學習資料或者需要程式碼、視訊加Python學習群:960410445 前言 對於初學者而言,案例主要的是為了讓大家練手,明白其中如何這樣寫的思路,而不是拿著程式碼執行就完事了。 基本環境配置 系統

python中scrapy框架景點資料

--------------------------------------------------------------------------------------------- [版權申明:本文系作者原創,轉載請註明出處]  文章出處:https://blog.cs

和螞蜂窩的景點評論資料\攜評論資料\旅遊網站資料

本人長期出售超大量微博資料、旅遊網站評論資料,並提供各種指定資料爬取服務,Message to [email protected]。同時歡迎加入社交媒體資料交流群:99918768 前言   為了獲取多源資料需要到各個網站獲取一些景點的評論資訊

paythongithub登入頁面token資訊並登入github

1.語言: Python3.5 2.用到的庫: requests re(正則) 3.流程:手動登入檢視需要的引數,觀察一次登入傳送的請求登入過程如下: ***** *** *

Python爬蟲抓網機票資訊併發郵件通知

背景: 由於要買機票,所以一直進行搜尋,爬蟲可以幫我解決這個問題; 解釋的超級詳細。 於是通過這一過程,基本瞭解了一些; 查詢 上海 到 西安 4.29~05.02的機票: #coding:utf-8 import urllib2 from

用正則表示式從頁面原始碼提取酒店資訊並插入mysql資料庫

file_regEx_mysql_io desc: 從txt檔案中讀取字串,通過正則表示式提取關鍵字,並插入mysql資料庫的一個小demo. 前言 ​ 因為最近公司需要用到攜程上面的一些酒店資料,由於沒有接觸過爬蟲,所以只能投機取巧去爬html原始檔的程式碼,然後

【圖文詳解】scrapy爬蟲與動態頁面——拉勾網職位資訊(1)

5-14更新 注意:目前拉勾網換了json結構,之前是content - result 現在改成了content- positionResult - result,所以大家寫程式碼的時候要特別注意加上

【圖文詳解】scrapy爬蟲與動態頁面——拉勾網職位資訊(2)

上次挖了一個坑,今天終於填上了,還記得之前我們做的拉勾爬蟲嗎?那時我們實現了一頁的爬取,今天讓我們再接再厲,實現多頁爬取,順便實現職位和公司的關鍵詞搜尋功能。 之前的內容就不再介紹了,不熟悉的請一定要去看之前的文章,程式碼是在之前的基礎上修改的

python3實現淘寶頁面的商品的資料資訊(selenium+pyquery+mongodb)

1.環境須知 做這個爬取的時候需要安裝好python3.6和selenium、pyquery等等一些比較常用的爬取和解析庫,還需要安裝MongoDB這個分散式資料庫。 2.直接上程式碼 spider.py import re from config

貼吧頁面

turn tex max request 完成 發送 span fragment 代碼 Get方式 GET請求一般用於我們向服務器獲取數據,比如說,我們用百度搜索傳智播客:https://www.baidu.com/s?wd=傳智播客 瀏覽器的url會跳轉成如圖所示

爬蟲框架Scrapy入門——acg12某頁面

ima 需要 random 代碼 定義 ons tps 框架 resp 1.安裝1.1自行安裝python3環境1.2ide使用pycharm1.3安裝scrapy框架2.入門案例2.1新建項目工程2.2配置settings文件2.3新建爬蟲app新建app將start_u

利用高德API + Python鏈家網租房資訊 01

看了實驗樓的專案發現五八同城爬取還是有點難度所以轉戰鏈家 實驗程式碼如下 from bs4 import BeautifulSoup from urllib.request import urlopen import csv url = 'https://gz.lia