문제

레스토랑 주소나 특정 위치에 대한 다양한 이벤트 날짜 등 다양한 웹페이지에서 데이터를 가져오고 싶습니다.특정 사이트 집합에서 이 데이터를 추출하는 데 사용할 수 있는 가장 좋은 라이브러리는 무엇입니까?

도움이 되었습니까?

해결책

Python을 사용하는 경우 Beautiful Soup(http://crummy.com/software/BeautifulSoup).

매우 유능한 라이브러리로 쉽게 긁을 수 있습니다.

다른 팁

.net 프로그래머를 위한 HTML Agility Pack은 정말 훌륭합니다.XPath로 쿼리할 수 있는 XML 문서로 웹페이지를 변환합니다.

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

여기에서 찾을 수 있습니다. http://www.codeplex.com/htmlagilitypack

여기서 일반적인 대답은 모든 언어 + http 라이브러리 + html/xpath 파서를 사용하는 것입니다.Ruby + hpricot을 사용하면 깔끔하고 깨끗한 솔루션을 얻을 수 있습니다.

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

Hpricot에 대한 자세한 내용은 다음을 참조하세요. http://code.whytheluckystiff.net/hpricot/

나는 개인적으로 좋아한다 WWW::기계화 이러한 종류의 작업을 위한 Perl 모듈입니다.이는 일반적인 웹 브라우저를 모델로 한 객체를 제공합니다(예:링크를 따라가거나, 양식을 작성하거나, 메소드를 호출하여 "뒤로 버튼"을 사용할 수 있습니다.

실제 콘텐츠를 추출하려면 다음과 같이 연결할 수 있습니다. HTML::트리빌더 현재 방문 중인 웹사이트를 트리로 변환하려면 HTML::요소 개체를 검색하고 원하는 데이터를 추출합니다( look_down() 의 방법 HTML::Element 특히 유용합니다).

나는 watir 또는 selenium이 최선의 선택이라고 생각합니다.언급된 다른 라이브러리의 대부분은 실제로 HTML 파서이며 이는 여러분이 원하는 것이 아닙니다...웹사이트 소유자가 자신의 데이터에 접근하기를 원한다면 그는 자신의 데이터베이스나 사이트 덤프를 토렌트에 올려 놓고 모든 http 요청과 비용이 많이 드는 트래픽을 피할 것입니다.

기본적으로 HTML을 구문 분석해야 하지만 더 중요한 것은 브라우저를 자동화하는 것입니다.이는 마우스를 움직이고 클릭할 수 있을 정도로 기본적으로 사용자를 흉내내는 것입니다.이를 방지하려면 화면 캡처 프로그램을 사용하여 보안 문자에 도달하고 이를 decaptcha.com(1센트 미만의 비용으로 해결)으로 보내야 합니다.브라우저에서 '표시되는 대로' 렌더링하지 않고 HTML을 구문 분석하여 해당 보안 문자 파일을 저장하는 것을 잊어버리세요.httprequestscraping이 아닌 스크린 스크래핑 중입니다.

watir는 autoitx(마우스를 움직이고 필드에 키를 입력하기 위해 -> 때로는 올바른 자바스크립트 이벤트를 설정하는 데 필요함) 및 보안 문자를 위한 간단한 화면 캡처 유틸리티와 결합하여 나를 위한 트릭을 수행했습니다.이렇게 하면 가장 성공적일 것입니다. 사이트 소유자가 일부 텍스트를 그래픽으로 변환했음을 알아내기 위해 훌륭한 HTML 파서를 작성하는 것은 전혀 쓸모가 없습니다.(문제가 있나요?아니요, OCR 라이브러리를 구해서 jpeg를 입력하면 텍스트가 반환됩니다.게다가 나는 그들이 그렇게까지 가는 것을 거의 본 적이 없습니다. 비록 중국 사이트에서는 그래픽에 많은 텍스트가 있지만.

Xpath는 내 하루를 항상 구해주었습니다. 이것은 훌륭한 도메인 특정 언어(IMHO, 제가 틀릴 수도 있습니다)이며 페이지의 모든 태그에 접근할 수 있지만 때로는 조정이 필요합니다.

내가 놓친 것은 '역 템플릿'이었습니다(셀레늄의 로봇 프레임워크에는 이것이 있습니다).Perl은 CPAN 모듈 Template::Extract에 이 기능을 가지고 있어 매우 편리합니다.

HTML 구문 분석이나 DOM 생성 등은 브라우저에 맡깁니다. 예, 속도는 빠르지는 않지만 항상 작동할 것입니다.

또한 사용자 에이전트인 것처럼 가장하는 라이브러리는 쓸모가 없으며 요즘 사이트는 스크래핑으로부터 보호되며 보안 문자를 뛰어넘기 위해 실제 화면에 사이트를 렌더링하는 것이 종종 필요하지만 정보가 표시되도록 트리거해야 하는 자바스크립트 이벤트도 있습니다. .

Ruby를 좋아한다면 Watir를, 나머지는 Selenium을 좋아한다고 말하고 싶습니다.'Human Emulator'(또는 러시아의 Web Emulator)는 실제로 이런 종류의 스크래핑을 위해 만들어졌지만 역시 의도를 숨기지 않는 회사의 러시아 제품입니다.

나는 또한 이번 주 중 Wiley가 스크래핑에 관한 새로운 책을 내놓았을 것이라고 생각합니다. 그것은 흥미로울 것입니다.행운을 빌어요...

개인적으로 찾아보니 http://github.com/shuber/curl/tree/master 그리고 http://simplehtmldom.sourceforge.net/ 내 PHP 스파이더링/스크래핑 프로젝트에 사용하기에 아주 좋습니다.

WWW::기계화 라이브러리는 필요한 실제 페이지에 도달하기 위해 웹 사이트와 상호 작용하는 당나귀 작업을 수행하는 데 탁월합니다.

저는 LWP(Perl의 경우 Libwww)를 사용하겠습니다.다음은 좋은 가이드입니다: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW::Scraper에는 다음 문서가 있습니다. http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.html이는 기반으로 유용할 수 있으며 레스토랑 마이닝 요구 사항에 맞는 자체 모듈을 만들고 싶을 수도 있습니다.

LWP는 여러분이 구축할 수 있는 기본 크롤러를 제공합니다.

Perl Mechanize를 추천하는 답변이 많이 있지만 저는 Ruby Mechanize(Perl 버전과 매우 유사)가 더 좋다고 생각합니다.구문적으로 훨씬 깔끔한 방식으로 양식과 같은 일부 항목을 처리합니다.또한 실행되는 몇 가지 프런트엔드가 있습니다. 위에 Ruby Mechanize를 사용하면 작업이 더욱 쉬워집니다.

어떤 언어를 사용하고 싶으신가요?

awk를 사용하면 컬이 필요한 전부일 수 있습니다.

당신이 사용할 수있는 정돈하다 XHTML로 변환한 다음 선택한 언어에서 사용할 수 있는 XML 처리 기능을 사용하세요.

나는 추천하고 싶다 아름다운수프.가장 빠르지는 않지만 대부분의 파서가 질식하는 (X)HTML 페이지의 형식이 좋지 않은 점에서 실제로 잘 수행됩니다.

누군가가 말한 것.

어떤 언어든 사용하세요.

좋은 파서 라이브러리와 http 라이브러리가 있으면 설정이 완료됩니다.

트리 작업이 느려지고 좋은 구문 분석 라이브러리를 사용하면 됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top