我想知道如何通過java在網站上搜索。我想先在網站上搜索一個詞。然後網站將返回一些鏈接。我想點擊這些鏈接。他們會將我重定向到另一個頁面,最後我會從該頁面獲取數據。我檢查了jsoup爲了解析html頁面,但我不知道如何在網站上進行搜索並使用java單擊鏈接。通過java在網站上搜索
回答
您需要make HTTP requests,就像瀏覽器一樣。使用例如Network panel in Google Chrome來查看Chrome手動執行搜索時發生的HTTP請求,忽略那些無關緊要的代碼並編寫代碼來模擬那些做的事情。
爲了找到正確的搜索結果來請求(「點擊」),您也需要使用類似jsoup的東西。
您可以使用硒代替,但這將是荒謬的重量級,除非該網站使用一些複雜的Javascript或插件來執行搜索,這是不太可能的。
我會在我的谷歌應用程序引擎項目中使用,所以我真的在尋找不重量級或難以使用的東西 –
是的,只是重申一下,我說你不應該使用Selenium,你應該使用HTTP請求API。 –
順便說一下,Google App Engine擁有自己的抓取網頁的抓取服務。無論您使用的是JDK還是JDK,都無關緊要,JDK也可以使用App Engine上的獲取服務。 –
首先,您應該熟悉HTTP請求協議。然後,編寫你的網站變成一個套接字服務器是一件簡單的事情,當你連接到你的時候發送一些有意義的數據。 我只使用socket,os和sys庫在Python中創建了一個Web服務器。
基本HTTP協議是 ,客戶端將發送服務器
GET /path/file.extension HTTP/1.0 < - 基本上得到是的請求的類型,/path/file.extension基本文件被請求。和HTTP/1.0是協議 主機:yourwebsite.url < - 我不認爲這是必要的 用戶代理:HTTPTool/1.0 < - 基本上就像他們用來發送HTTP請求的方法,如Chrome或火狐 [空白]
,服務器將響應種像 HTTP/1.0 200 OK < - 再次,協議,則該消息(404沒有找到,等) 日期:星期一,2012年11月19日14:15:45 GMT < - 這不是必需的,但你可能還包括它 內容類型:文本/ HTML < - 您發送的內容類型,HTML是文本/ HTML也是圖像拉鍊等。只是谷歌它(這很簡單) 內容長度:12313131 < - 數據的長度(以字符爲單位)。這是需要 [空白]
< HTML>
<頭>
< H2>嗨</H2>
< /頭「
<體>
歡迎來到我的船尾
</BODY>
</html>
然後服務器發送數據後,它關閉套接字。在Java中爲 ,字符串長度爲:
String blah =「foobar」; int length = blah。長度();
有關套接字在Java中的詳細信息閱讀:http://docs.oracle.com/javase/tutorial/networking/sockets/index.html
之後,它是存儲要查找數組中的單詞和處理數據發送到客戶端的問題。你也希望能夠理解POST。之後,你所做的就是獲得他們想要看到的文件,並將其提供給他們。當他們搜索某些東西時,在數據庫中查找它返回鏈接或返回找不到的項目。
其實我已經做了你所說的。我打開tcp連接來逐字節讀取網站,但然後我必須再次解析返回的html頁面。我希望找到另一種解決方案。 –
實際上,在進一步閱讀您希望做的事情之後,您可以做的是您可以簡單地進行維基百科搜索。 http://en.wikipedia.org/w/api.php?action=opensearch&search=
@AhmetTanakol如果你已經完成了這個工作,你應該在問題中說明這一點! –
看看這個例子。下載最新的罐子HtmlUnit。創建新項目導入這些jar並添加以下類。希望你能達到你要求的目標。
package com.examples.htmlunit;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.RefreshHandler;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTable;
import com.gargoylesoftware.htmlunit.html.HtmlTableRow;
public class YahooMail {
public static void main(String[] args) throws Exception {
// Create and initialize WebClient object
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2);
webClient.setThrowExceptionOnScriptError(false);
webClient.setRefreshHandler(new RefreshHandler() {
public void handleRefresh(Page page, URL url, int arg) throws IOException {
System.out.println("handleRefresh");
}
});
// visit Yahoo Mail login page and get the Form object
HtmlPage page = (HtmlPage) webClient.getPage("https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym");
HtmlForm form = page.getFormByName("login_form");
// Enter login and passwd
form.getInputByName("login").setValueAttribute("@@@@@@@");
form.getInputByName("passwd").setValueAttribute("@@@@@@@");
// Click "Sign In" button/link
page = (HtmlPage) form.getInputByValue("Sign In").click();
// Click "Inbox" link
HtmlAnchor anchor = (HtmlAnchor)page.getHtmlElementById("WelcomeInboxFolderLink");
page = (HtmlPage) anchor.click();
// Get the table object containing the mails
HtmlTable dataTable = (HtmlTable) page.getHtmlElementById("datatable");
// Go through each row and count the row with class=msgnew
int newMessageCount = 0;
List rows = (List) dataTable.getHtmlElementsByTagName("tr");
for (HtmlTableRow row: rows) {
if (row.getAttribute("class").equals("msgnew")) {
newMessageCount++;
}
}
// Print the newMessageCount to screen
System.out.println("newMessageCount = " + newMessageCount);
//System.out.println(page.asXml());
}
}
- 1. Google在網站上搜索
- 2. 允許Android SDK通過網站搜索?
- 3. 如何在網站搜索的任何網站上搜索
- 4. 在Java中訪問網站搜索框
- 5. 網站搜索網站
- 6. 搜索網站
- 7. 搜索網站,
- 8. 在ASP.NET MVC網站上實現搜索
- 9. 在Excel上進行網站搜索
- 10. 在網站上搜索文件夾
- 11. 在分類網站上搜索實施
- 12. 在網站上實現「搜索」功能
- 13. 安卓在網站上搜索信息
- 14. 在網站上搜索功能?
- 15. 搜索引擎如何通過互聯網找到網站
- 16. 通過java登錄網站
- 17. Java - 在給定網站上使用搜索欄
- 18. 一個在某個網站上搜索的java程序
- 19. ASP.NET搜索網站
- 20. Yii網站搜索
- 21. 通過'搜索網頁'自定義Google搜索並搜索'我的網站'單選按鈕
- 22. 在瀏覽器中通過java搜索
- 23. 搜索通過ID上tinysong.com
- 24. 過濾Google網站搜索結果
- 25. 如何在java中通過局域網搜索文件?
- 26. 網站搜索與搜索時選項
- 27. 修改搜索查詢網站搜索
- 28. 搜索網站上的圖像
- 29. 搜索網站上的PHP SQL
- 30. 網站搜索200k頁面網站
Httpclient lib? – smk
您能澄清更多關於搜索功能嗎?什麼是鏈接的理想來源? Apache Lucene可能對您有所幫助。 – amit
網站上有一個搜索框。我想搜索一種藥物的屬性。所以當我在搜索框中寫入藥物名稱時,它會返回一個鏈接。所以我點擊這個鏈接。我在另一個html頁面上顯示藥物的屬性。 –