2008-09-15 34 views
11

Tôi muốn nhận dữ liệu từ các trang web khác nhau, chẳng hạn như địa chỉ nhà hàng hoặc ngày của các sự kiện khác nhau cho một vị trí cụ thể và v.v. Thư viện nào tốt nhất tôi có thể sử dụng để trích xuất dữ liệu này từ một tập hợp các trang web nhất định?thư viện tốt nhất để quét web

+0

Khám phá [câu hỏi này] (http://stackoverflow.com/questions/2861/options-for-html-scraping) cho tất cả câu trả lời của bạn. –

Trả lời

0

Ngôn ngữ nào bạn muốn sử dụng?

curl với awk có thể là tất cả những gì bạn cần.

0

Bạn có thể sử dụng tidy để chuyển đổi thành XHTML và sau đó sử dụng bất kỳ cơ sở xử lý XML nào mà ngôn ngữ bạn chọn có sẵn.

1

Thư viện Perl WWW::Mechanize là tuyệt vời để thực hiện công việc lừa tương tác với trang web để truy cập trang thực mà bạn cần.

0

Tôi muốn giới thiệu BeautifulSoup. Nó không phải là nhanh nhất nhưng hoạt động thực sự tốt liên quan đến các trang HTML (X) HTML không tốt mà hầu hết các trình phân tích cú pháp đều bị sặc.

1

Tôi sẽ sử dụng LWP (Libwww cho Perl). Dưới đây là hướng dẫn ngắn gọn: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW :: Scraper có tài liệu tại đây: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.html Nó có thể hữu ích làm cơ sở, bạn có thể muốn tạo mô-đun riêng phù hợp với nhu cầu khai thác nhà hàng của bạn.

LWP sẽ cung cấp cho bạn trình thu thập thông tin cơ bản để bạn có thể xây dựng.

4

Tôi nghĩ câu trả lời chung ở đây là sử dụng bất kỳ ngôn ngữ + thư viện http + html/xpath phân tích cú pháp nào. Tôi thấy rằng việc sử dụng ruby ​​+ Hpricot đưa ra một giải pháp sạch đẹp:

require 'rubygems' 
require 'hpricot' 
require 'open-uri' 

sites = %w(http://www.google.com http://www.stackoverflow.com) 

sites.each do |site| 
    doc = Hpricot(open(site)) 

    # iterate over each div in the document (or use xpath to grab whatever you want) 
    (doc/"div").each do |div| 
    # do something with divs here 
    end 
end 

Để biết thêm về Hpricot thấy http://code.whytheluckystiff.net/hpricot/

10

HTML Agility Pack Đối với Programers .net là tuyệt vời. Nó biến các trang web trong tài liệu XML có thể được truy vấn bằng XPath.

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//[email protected]") 
{ 
HtmlAttribute att = link"href"; 
att.Value = FixLink(att); 
} 
doc.Save("file.htm"); 

Bạn có thể tìm thấy tại đây. http://www.codeplex.com/htmlagilitypack

3

Cá nhân tôi thích mô-đun Perl WWW::Mechanize cho các loại tác vụ này. Nó cung cấp cho bạn một đối tượng được mô hình hóa sau một trình duyệt web điển hình, (nghĩa là bạn có thể theo liên kết, điền vào biểu mẫu hoặc sử dụng "nút quay lại" bằng cách gọi các phương thức trên đó).

Đối với việc khai thác các nội dung thực tế, sau đó bạn có thể móc nó lên đến HTML::TreeBuilder để chuyển đổi trang web bạn đang truy cập vào một cây HTML::Element đối tượng, và trích xuất các dữ liệu bạn muốn (phương pháp look_down() của HTML::Element đặc biệt hữu ích).

1

Đã có một số câu trả lời đề xuất Cơ chế Perl, nhưng tôi nghĩ rằng Ruby Mechanize (rất giống với phiên bản của Perl) thậm chí còn tốt hơn. Nó xử lý một số thứ như biểu mẫu theo một cách gọn gàng hơn. Ngoài ra, có một vài giao diện người dùng chạy trên đầu trang của Ruby Mechanize giúp mọi việc trở nên dễ dàng hơn.

0

những gì ai đó đã nói.

sử dụng BẤT CỨ NGÔN NGỮ.

miễn là bạn có thư viện phân tích cú pháp tốt và thư viện http, bạn được đặt.

công cụ cây chậm hơn, sau đó chỉ cần sử dụng thư viện phân tích cú pháp tốt.

3

tôi nghĩ rằng watir hoặc selen là những lựa chọn tốt nhất. Hầu hết các thư viện được đề cập khác thực sự là các trình phân tích cú pháp HTML, và đó không phải là điều bạn muốn ... Bạn đang cạo, nếu chủ sở hữu trang web muốn bạn truy cập dữ liệu của mình, anh ta đã đặt một cơ sở dữ liệu hoặc trang web của mình vào một torrent và tránh tất cả các yêu cầu http và lưu lượng truy cập đắt tiền.

về cơ bản, bạn cần phải phân tích HTML, nhưng quan trọng hơn là tự động hóa trình duyệt. Điều này đến mức có thể di chuyển chuột và nhấp chuột, về cơ bản thực sự bắt chước một người dùng. Bạn cần phải sử dụng một chương trình screencapture để có được các captchas và gửi chúng đến decaptcha.com (giải quyết chúng cho một phần nhỏ của một xu) để phá vỡ đó. quên việc lưu tệp captcha đó bằng cách phân tích cú pháp html mà không hiển thị nó trong trình duyệt 'vì nó được cho là được nhìn thấy'. Bạn đang screencraping, không httprequestscraping.

watir thực hiện thủ thuật cho tôi kết hợp với autoitx (để di chuyển chuột và nhập các phím trong trường -> đôi khi điều này là cần thiết để đặt các sự kiện javascript phù hợp) và tiện ích chụp màn hình đơn giản cho hình ảnh xác thực. theo cách này, bạn sẽ thành công nhất, nó khá vô ích khi viết một trình phân tích cú pháp html tuyệt vời để tìm ra rằng chủ sở hữu của trang web đã biến một số văn bản thành đồ họa. (Có vấn đề? Không, chỉ cần lấy một thư viện OCR và nạp jpeg, văn bản sẽ được trả lại). Bên cạnh đó tôi đã hiếm khi nhìn thấy chúng đi xa, mặc dù trên các trang web Trung Quốc, có rất nhiều văn bản trong đồ họa.

Xpath đã lưu ngày của tôi mọi lúc, đó là Ngôn ngữ cụ thể của tên miền (IMHO, tôi có thể sai) và bạn có thể truy cập bất kỳ thẻ nào trong trang, mặc dù đôi khi bạn cần chỉnh sửa.

Điều tôi đã bỏ lỡ là 'mẫu ngược' (khung robot của selen có phần này). Perl có điều này trong CPAN module Template :: Extract, rất tiện dụng.

Phân tích html hoặc tạo DOM, tôi sẽ chuyển sang trình duyệt, vâng, nó sẽ không nhanh, nhưng nó sẽ hoạt động mọi lúc.

Ngoài ra các thư viện giả vờ là Useragents là vô ích, các trang web được bảo vệ chống lại việc cạo ngày nay và việc hiển thị trang web trên màn hình thực thường là điều cần thiết để vượt ra ngoài captcha, cũng như các sự kiện javascript cần được kích hoạt thông tin xuất hiện, v.v.

Watir nếu bạn tham gia Ruby, Selenium cho phần còn lại tôi muốn nói. The 'Emulator Human' (hoặc giả lập web ở Nga) thực sự được tạo ra cho loại cào, nhưng sau đó một lần nữa nó là một sản phẩm Nga từ một công ty mà không có ý định bí mật của nó.

tôi cũng nghĩ rằng một trong những tuần này Wiley có một cuốn sách mới về cạo, điều đó sẽ rất thú vị. Chúc bạn may mắn ...

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