2015-10-15 56 views
0

對於stekhn,這裏的正確鏈接:var location = "http://www.roblox.com/Trade/inventoryhandler.ashx?filter=0&userid=" + i + "&page=1&itemsPerPage=14";搜索URL增加文本對於

我想創建一個JavaScript腳本,我可以通過一個用戶資源中搜索,發現如果他們有什麼,我希望在他們的庫存和輸出用戶ID,如果他們有。

如果我輸入bluesteel,我需要一個Javascript腳本,它將通過http://snackyrite.com/site.ashx?userid=1進行搜索並檢測它是否包含文本'bluesteel' - 如果是,我需要它顯示用戶標識,它是1

您可能會覺得這很容易,我可以很容易地找到腳本 - 好吧,有一個問題,我的目標不僅僅是讓它搜索userid = 1,我需要它到從userid = 1到userid = 45356

如果在userid = 5,userid = 3054和userid = 12(這些僅僅是例子)中找到'bluesteel'這個詞,我需要它顯示5,3054和12 ID's)就一樣頁面腳本從哪裏跑過。

這是我試過的腳本,但用戶ID不會增加(我不知道該怎麼做)。

var location = http://snackyrite.com/site.ashx?userid=1; 
if(location.indexOf("bluesteel") > -1) { 
    output.userid 
} 

我很抱歉,Javascript並不是我最好的。

+0

您是否在尋找網頁刮板?由於JavaScript通常在客戶端執行,因此它不會有什麼幫助(除非使用node.js)。 – stekhn

+0

嗯,我正在使用虛擬主機..會PHP更好嗎? – lizzysmith

+0

這是你的網站,還是你只是試圖從你不擁有的網站收集數據?如果它是你的網站,檢查呈現的HTML數據的方法可能是錯誤的。 – stekhn

回答

1

使用一個循環:

for (var i = 1; i <=45356; i++) { 
    var loc = "http://snackyrite.com/site.ashx?userid="+i; 
    // get contents of location 
    if (contents.indexOf("bluesteel") > -1) { 
     console.log(i); 
    } 
} 

鑑於獲取的內容大概會使用AJAX,在if將可能是在回調函數。請參閱Javascript infamous Loop issue?瞭解如何編寫循環,以便i將保留在回調函數中。

+0

絕對正確。但我認爲「獲取內容」部分是問題所在。 – stekhn

+0

也許,但問題是「用戶ID不會增加」。這聽起來像他不知道如何做循環或追加循環索引到URL。 – Barmar

+0

不知道這是否意味着會發生,但我似乎被重新定向到snackyrite.com。對不起,如果這不是在我原來的帖子中明確,但目標是顯示在 – lizzysmith

0

這種網頁抓取不能在瀏覽器(客戶端JavaScript)中完成。

我會建議用Node.js構建一個刮板。

  1. 安裝Node.js
  2. 安裝請求npm i request
  3. 安裝cheerio npm i cheerio
  4. 創建一個文件scraper.js
  5. 運行node scraper.js

代碼scraper.js

// Import the scraping libraries 
var request = require("request"); 
var cheerio = require("cheerio"); 

// Array for the user IDs which match the query 
var matches = []; 

// Do this for all possible users 
for (var i = 1; i <= 45356; i++) { 

    var location = "http://snackyrite.com/site.ashx?userid="+i; 

    request(location, function (error, response, body) { 

     if (!error) { 

      // Load the website content 
      var $ = cheerio.load(body); 
      var bodyText = $("body").text(); 

      // Search the website content for bluesteel 
      if (bodyText.indexOf("bluesteel") > -1) { 

       console.log("Found bluesteel in inventory of user ", i); 
       // Save the user ID, if bluesteel was found 
       matches.push(i); 
      } 

     // Something goes wrong 
     } else { 

      console.log(error.message); 
     } 
    }); 

    console.log("All users with bluesteel in inventory: ", matches); 
} 

上面的代碼看起來有些複雜,但我認爲這是它應該完成的方式。你可以使用任何其他的抓取工具,庫。

+0

由於某種原因,我被告知'內容不明確'http://prntscr.com/8rpuza – lizzysmith

+0

我的錯誤。它應該是'bodyText.indexOf(「bluesteel」)'。更新。 – stekhn

+0

乾杯,似乎解決了這個錯誤。然而,這是正常的.. http://prntscr.com/8rpzdq – lizzysmith