Tôi đã tự hỏi liệu có thể "tự động hóa" nhiệm vụ nhập vào các mục nhập để tìm kiếm biểu mẫu và trích xuất các kết quả phù hợp từ kết quả không. Ví dụ, tôi có một danh sách các bài báo trên tạp chí mà tôi muốn nhận được DOI (số nhận dạng đối tượng kỹ thuật số); bằng tay cho điều này tôi sẽ đi đến trang tìm kiếm bài báo (ví dụ: http://pubs.acs.org/search/advanced), nhập vào tác giả/tiêu đề/âm lượng (v.v.) và sau đó tìm bài viết trong danh sách kết quả trả về và chọn DOI và dán vào danh sách tham khảo của tôi. Tôi sử dụng R và Python để phân tích dữ liệu thường xuyên (tôi được lấy cảm hứng từ một bài đăng trên RCurl) nhưng không biết nhiều về giao thức web ... là một điều có thể (ví dụ như sử dụng một cái gì đó như BeautifulSoup của Python?). Có bất kỳ tài liệu tham khảo tốt để làm bất cứ điều gì từ xa tương tự như nhiệm vụ này? Tôi chỉ quan tâm nhiều đến việc tìm hiểu về việc cào web và các công cụ cho việc cào web nói chung cũng giống như việc thực hiện công việc cụ thể này ... Cảm ơn bạn đã dành thời gian!duyệt web để điền vào (và truy xuất) các biểu mẫu tìm kiếm?
Trả lời
Beautiful Soup là rất tốt cho phân tích webpages- đó là một nửa của những gì bạn muốn làm. Python, Perl, và Ruby đều có một phiên bản của mechanize, và đó là một nửa khác:
http://wwwsearch.sourceforge.net/mechanize/
mechanize cho phép của bạn điều khiển một trình duyệt:
# Follow a link
browser.follow_link(link_node)
# Submit a form
browser.select_form(name="search")
browser["authors"] = ["author #1", "author #2"]
browser["volume"] = "any"
search_response = br.submit()
Với mechanize và Beautiful Soup bạn có một khởi đầu tuyệt vời. Một công cụ thêm tôi muốn xem xét là Firebug, như được sử dụng trong hướng dẫn ruby cào nhanh chóng này:
http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/
Firebug có thể tăng tốc độ xây dựng của bạn của XPath cho phân tích tài liệu, giúp bạn tiết kiệm một số thời gian nghiêm trọng.
Chúc may mắn!
Tuyệt vời !! Cảm ơn bạn - rất hữu ích! – hatmatrix
Stephen! Đánh dấu cho tôi một câu trả lời! Tôi đang đua một đồng nghiệp đến 100 điểm :-) – mixonic
Tôi đang cố gắng! Tôi chỉ có một OpenID nhưng nó nói với tôi rằng tôi phải có 15 danh tiếng để bỏ phiếu lên ?? Xin lỗi, lần đầu tiên trên stackoverflow ... nó có phức tạp không? – hatmatrix
WebRequest req = WebRequest.Create("http://www.URLacceptingPOSTparams.com");
req.Proxy = null;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
//
// add POST data
string reqString = "searchtextbox=webclient&searchmode=simple&OtherParam=???";
byte[] reqData = Encoding.UTF8.GetBytes (reqString);
req.ContentLength = reqData.Length;
//
// send request
using (Stream reqStream = req.GetRequestStream())
reqStream.Write (reqData, 0, reqData.Length);
string response;
//
// retrieve response
using (WebResponse res = req.GetResponse())
using (Stream resSteam = res.GetResponseStream())
using (StreamReader sr = new StreamReader (resSteam))
response = sr.ReadToEnd();
// use a regular expression to break apart response
// OR you could load the HTML response page as a DOM
(Phỏng theo Joe Albahri của "C# trong một nutshell")
Cảm ơn bạn - tốt để biết điều đó là có thể! ... Tôi đoán vậy. (không quá quen thuộc với .NET, mặc dù tôi nghe nó là tất cả các cơn thịnh nộ ...) – hatmatrix
Có nhiều công cụ để duyệt web. Có một plugin firefox tốt được gọi là iMacros. Nó hoạt động rất tốt và không cần kiến thức lập trình nào cả. Phiên bản miễn phí có thể được tải xuống tại đây: https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/ Điều tốt nhất về iMacros, là nó có thể giúp bạn bắt đầu sau vài phút và cũng có thể được khởi chạy từ dòng lệnh bash và cũng có thể được gọi từ bên trong các tập lệnh bash.
Một bước nâng cao hơn sẽ là webdrive selen. Lý do tôi chọn selen là nó được ghi lại một cách tuyệt vời suiting người mới bắt đầu. chỉ đọc sau page:
sẽ giúp bạn bắt đầu và chạy nhanh chóng. Selenium hỗ trợ java, python, php, c vì vậy nếu bạn đã quen với bất kỳ ngôn ngữ nào trong số này, bạn sẽ quen thuộc với tất cả các lệnh cần thiết. Tôi thích biến thể webdrive của selen, vì nó mở một trình duyệt để bạn có thể kiểm tra các trường và kết quả đầu ra. Sau khi thiết lập kịch bản bằng cách sử dụng webdrive, bạn có thể dễ dàng di chuyển tập lệnh sang IDE, do đó chạy không đầu.
Để cài đặt selen bạn có thể làm bằng cách gõ lệnh
sudo easy_install selenium
này sẽ chăm sóc của các phụ thuộc và tất cả mọi thứ cần thiết cho bạn.
Để chạy script của bạn một cách tương tác, chỉ cần mở một terminal và gõ
python
bạn sẽ thấy dấu nhắc python, >>> và bạn có thể gõ vào các lệnh.
Dưới đây là một số mẫu mã mà bạn có thể dán vào thiết bị đầu cuối, nó sẽ tìm kiếm google cho các loại pho mát từ
package org.openqa.selenium.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Selenium2Example {
public static void main(String[] args) {
// Create a new instance of the Firefox driver
// Notice that the remainder of the code relies on the interface,
// not the implementation.
WebDriver driver = new FirefoxDriver();
// And now use this to visit Google
driver.get("http://www.google.com");
// Alternatively the same thing can be done like this
// driver.navigate().to("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
// Check the title of the page
System.out.println("Page title is: " + driver.getTitle());
// Google's search is rendered dynamically with JavaScript.
// Wait for the page to load, timeout after 10 seconds
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("cheese!");
}
});
// Should see: "cheese! - Google Search"
System.out.println("Page title is: " + driver.getTitle());
//Close the browser
driver.quit();
}}
Tôi hy vọng rằng điều này có thể cung cấp cho bạn một khởi đầu.
Chúc mừng :)
Trước tiên, bạn đang yêu cầu người dùng cài đặt Ứng dụng khách Selenium cho Python; nhưng ví dụ mã của bạn là mã Java. Điều này là khó hiểu. – knb
- 1. Điền vào biểu mẫu bằng PyQt và QWebview
- 2. Bật tự động điền biểu mẫu của trình duyệt
- 3. Điều khiển trình duyệt web WPF và biểu mẫu winforms
- 4. Ngăn các trình duyệt tự động điền các trường biểu mẫu
- 5. Sử dụng jQuery và JSON để điền các biểu mẫu?
- 6. Sử dụng PDFBox để điền vào Biểu mẫu PDF
- 7. Ứng dụng Android để điền vào Biểu mẫu PDF
- 8. Điền vào biểu mẫu với jQuery
- 9. Tìm điều khiển trong biểu mẫu web
- 10. Thuật toán NLP để 'điền' các cụm từ tìm kiếm
- 11. Sử dụng Python để đăng nhập vào trang web, điền vào một mẫu, sau đó đăng xuất
- 12. Điền vào biểu mẫu trong WebView với Javascript
- 13. AngularJS "ng-submit" có vấn đề khi trình duyệt điền trước các trường biểu mẫu?
- 14. Tạo bookmarklet để điền vào mẫu
- 15. Kéo và thả hình ảnh vào biểu mẫu web
- 16. Đọc từ serialize để điền vào mẫu
- 17. Làm cách nào để ngăn trình duyệt lưu vào các trường biểu mẫu bộ nhớ đệm?
- 18. Làm cách nào để điền vào trường biểu mẫu và gửi, sử dụng javascript?
- 19. Điền vào các giá trị biểu mẫu trong một trang web thông qua một tập lệnh Python (không thử nghiệm)
- 20. Chức năng nút quay lại trang web có biểu mẫu và kết quả tìm kiếm + Ajax (ASP.NET)
- 21. Sử dụng iText (iTextSharp) để điền các trường biểu mẫu XFA vào PDF?
- 22. Tắt tính năng tự động điền trên biểu mẫu web thông qua HTML hoặc JavaScript?
- 23. Cách tạo biểu mẫu 'điền vào chỗ trống' ở Django
- 24. gửi biểu mẫu trên 'nhập' trong trình duyệt web IE "
- 25. Tự động điền vào các giá trị biểu mẫu với jQuery
- 26. Làm thế nào để điền vào mẫu PDF trong php
- 27. Tìm kiếm mẫu VIM để tìm kiếm nhanh chóng
- 28. Ruby Rails: truy xuất id của trường nhập biểu mẫu
- 29. Kéo và thả trực tiếp từ Outlook vào biểu mẫu web
- 30. Cách chính xác để dừng tự động điền các ô nhập biểu mẫu?
bạn đã đưa ra giải pháp tốt cho vấn đề này chưa? Tôi tìm thấy điều này sau khi hỏi một câu hỏi tương tự (trùng lặp?) Tại đây http://stackoverflow.com/questions/9711539/can-i-query-the-digital-object-identifier-for-a-list-of-citations –
@ David - không, xin lỗi. Đã không nhận được đủ xa với bất kỳ tùy chọn để bình luận ... – hatmatrix