2011-09-22 34 views
9

Bạn có thể sử dụng Jsoup để gửi tìm kiếm tới Google, nhưng thay vì gửi yêu cầu của bạn qua "Tìm kiếm của Google", hãy sử dụng "Tôi cảm thấy may mắn"? Tôi muốn nắm bắt tên của trang web sẽ được trả lại.Jsoup có thể mô phỏng một nút bấm không?

Tôi thấy rất nhiều ví dụ về gửi biểu mẫu, nhưng không bao giờ là cách để chỉ định một nút cụ thể để thực hiện tìm kiếm hoặc gửi biểu mẫu.

Nếu Jsoup không hoạt động, điều gì sẽ xảy ra?

+0

Ý của bạn là JSONP? API tìm kiếm của Google là http://code.google.com/apis/customsearch/v1/overview.html – ceejayoz

+0

@Ceejayoz: đặt con chuột của bạn lên trên thẻ '[jsoup]' bên dưới câu hỏi cho đến khi một cửa sổ bật lên hiển thị và sau đó nhấp vào * thông tin * liên kết để tìm hiểu về nó. – BalusC

+0

@BalusC Tôi cho rằng đó là một yêu cầu đủ để làm rõ, xem xét nội dung câu hỏi và JSOUP một chữ cái, một chữ cái. – ceejayoz

Trả lời

11

Theo nguồn HTML của http://google.com vào nút "Tôi cảm thấy may mắn" có một cái tên của btnI:

<input value="I'm Feeling Lucky" name="btnI" type="submit" onclick="..." /> 

Vì vậy, chỉ cần thêm btnI tham số chuỗi truy vấn nên làm (giá trị không quan trọng):

http://www.google.com/search?hl=en&btnI=1&q=your+search+term

Vì vậy, Jsoup này nên làm:

String url = "http://www.google.com/search?hl=en&btnI=1&q=balusc"; 
Document document = Jsoup.connect(url).get(); 
System.out.println(document.title()); 

Tuy nhiên, điều này đã đưa ra một lỗi 403 (Forbidden).

Exception in thread "main" java.io.IOException: 403 error loading URL http://www.google.com/search?hl=en&btnI=1&q=balusc 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:387) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364) 
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143) 
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132) 
    at test.Test.main(Test.java:17) 

Có lẽ Google đã đánh hơi tác nhân người dùng và khám phá nó là Java. Vì vậy, tôi đã thay đổi nó:

String url = "http://www.google.com/search?hl=en&btnI=1&q=balusc"; 
Document document = Jsoup.connect(url).userAgent("Mozilla").get(); 
System.out.println(document.title()); 

sản lượng này (như dự kiến):

Các BalusC Mã

Các 403 là tuy nhiên một dấu hiệu cho thấy Google là không nhất thiết phải hài lòng với chương trình như thế. Bạn có thể nhận được (tạm thời) IP bị cấm khi bạn làm điều này quá thường xuyên.

+0

Cảm ơn BalusC. Điều đó trả lời câu hỏi một cách hoàn hảo. Tôi thấy yêu cầu URL đó là duy nhất đối với trang web của Google như thế nào.Tôi đã cố gắng tìm hiểu xem bạn có thể lập trình Jsoup theo nghĩa đen để nhấp vào một nút cụ thể bằng cách sử dụng Google làm ví dụ hay không. Tôi làm rõ hơn những gì tôi đang cố gắng làm trong câu hỏi khác của tôi trên trang web này. Câu hỏi đó đã không được trả lời trong một tháng và đã thất vọng vì vậy hỏi một câu hỏi khác với hy vọng nó sẽ giúp tôi với câu hỏi đầu tiên. Rất tiếc, kế hoạch của tôi đã bị phản đối và tôi xin lỗi vì đã dành thời gian của bạn để trả lời câu hỏi không giải quyết được vấn đề của tôi. – Brian

0

Có thể, nếu bạn có thể tìm ra cách truy vấn tìm kiếm của Google được thực hiện. Nhưng điều này không được Google cho phép, ngay cả khi bạn thành công với điều đó. Bạn nên sử dụng API chính thức của họ để thực hiện các truy vấn tìm kiếm tự động.

http://code.google.com/intl/en-US/apis/customsearch/v1/overview.html

+0

Cảm ơn bạn đã phản hồi. Tuy nhiên, tôi chỉ sử dụng google làm ví dụ. Tôi có một trang web mà tôi đang cố gắng sử dụng JSOUP để đăng nhập và nhận lại một số thông tin. Tôi không nghĩ rằng tôi đang thực sự đăng nhập. Tôi đang cố gắng tìm hiểu làm thế nào để mô phỏng cách nhấn "đăng nhập" hoặc "gửi" nút chung để đảm bảo rằng tôi đang thực sự đăng nhập vào trang web. Xin lỗi vì sự nhầm lẫn. – Brian

2

Tôi muốn dùng HtmlUnit để điều hướng máng trang web và JSOUP để cạo

+0

sao htmlUnit và jSoup có thể được sử dụng kết hợp? chỉnh sửa: đã nhận nó .. jSoup.parse có thể phân tích cú pháp chuỗi html do htmlUnit cung cấp – tObi

Các vấn đề liên quan