HTML 스크래핑을위한 Python 패키지 인 Beautiful Soup 을 시도하고 있습니다. 살펴 봐야 할 다른 HTML 스크래핑 패키지가 있습니까? 파이썬은 요구 사항이 아니며 실제로 다른 언어에 대해서도 듣고 싶습니다.
지금까지의 이야기:
XPathExpression
1.5부터 존재하는 Java 자체를 사용할 수 있습니다
HTML 스크래핑을위한 Python 패키지 인 Beautiful Soup 을 시도하고 있습니다. 살펴 봐야 할 다른 HTML 스크래핑 패키지가 있습니까? 파이썬은 요구 사항이 아니며 실제로 다른 언어에 대해서도 듣고 싶습니다.
지금까지의 이야기:
XPathExpression
1.5부터 존재하는 Java 자체를 사용할 수 있습니다
답변:
Beautiful Soup에 해당하는 Ruby 세계는 why_the_lucky_stiff의 Hpricot 입니다.
.NET 세계에서는 HTML Agility Pack을 권장합니다. 위의 옵션 중 일부 (HTMLSQL과 같은)만큼 단순하지는 않지만 매우 유연합니다. 제대로 구성된 XML 인 것처럼 잘못 구성된 HTML을 조작 할 수 있으므로 XPATH를 사용하거나 노드를 반복 할 수 있습니다.
BeautifulSoup은 HTML 스크래핑을위한 좋은 방법입니다. 저의 이전 직업은 많은 긁기 작업을했고 시작했을 때 BeautifulSoup에 대해 알고 싶습니다. 훨씬 더 유용한 옵션을 가진 DOM과 같으며 훨씬 더 파이썬입니다. Ruby를 사용하려면 BeautifulSoup을 RubyfulSoup이라고 포팅했지만 한동안 업데이트되지 않았습니다.
다른 유용한 도구로는 표준 Python 라이브러리의 일부인 HTMLParser 또는 sgmllib.SGMLParser가 있습니다. 태그를 입력 / 종료하고 html 텍스트가 나타날 때마다 메소드를 호출하여 작동합니다. 익숙하다면 해외 거주자와 같습니다. 이 라이브러리는 매우 큰 파일을 구문 분석하고 DOM 트리를 작성하는 것이 길고 비용이 많이 드는 경우에 특히 유용합니다.
정규 표현식은 그다지 필요하지 않습니다. BeautifulSoup은 정규 표현식을 처리하므로 힘이 필요하면 거기서 사용할 수 있습니다. 속도와 더 작은 메모리 공간이 필요하지 않으면 BeautifulSoup을 사용한다고 말합니다. 파이썬에서 더 나은 HTML 파서를 찾으면 알려주십시오.
HTMLSQL을 찾았 습니다 이 엄청나게 간단한 스크린 방법이라는 습니다. 결과를 얻는 데 문자 그대로 몇 분이 걸립니다.
쿼리는 다음과 같이 직관적입니다.
SELECT title from img WHERE $class == 'userpic'
동일한 접근법을 취하는 다른 대안이 있습니다.
Python에는 Beatiful Soup 외에도 HTML 스크랩에 대한 몇 가지 옵션이 있습니다. 여기 다른 것들이 있습니다 :
WWW:Mechanize
. 웹 페이지와 무관 한 객체와 같은 브라우저를 제공합니다libwww
. 요소를 탐색하고 선택할 수있는 다양한 옵션 지원 (예 : XPath 및 CSS 선택)'Simple HTML DOM Parser'는 PHP에 적합한 옵션입니다. jQuery 또는 JavaScript 선택기에 익숙한 경우 집에서 직접 찾을 수 있습니다.
왜 아직 Java에 대해 JSOUP을 언급하지 않았습니까? http://jsoup.org/
Django 명성 의 Adrian Holovaty 의 templatemaker 유틸리티 는 매우 흥미로운 접근 방식을 사용합니다. 동일한 페이지의 변형을 제공하고 변수 데이터의 "구멍"이있는 곳에서 "학습"합니다. HTML에 국한되지 않으므로 다른 일반 텍스트 내용을 스크랩하는 데 좋습니다. 또한 일반 텍스트로 변환 된 PDF 및 HTML (각각 pdftotext 및 lynx 포함)에도 사용했습니다.
나는 Screen-Scraper를 알고 사랑 합니다.
스크린 스크레이퍼는 웹 사이트에서 데이터를 추출하는 도구입니다. 스크린 스크레이퍼는 다음을 자동화합니다.
* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)
일반적인 용도 :
* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data
인위적인:
* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers
스크린 스크레이퍼의 세 가지 버전 :
* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.
Scraping Stack Overflow는 Shoes 및 Hpricot에서 특히 쉽습니다 .
require 'hpricot'
Shoes.app :title => "Ask Stack Overflow", :width => 370 do
SO_URL = "http://stackoverflow.com"
stack do
stack do
caption "What is your question?"
flow do
@lookup = edit_line "stackoverflow", :width => "-115px"
button "Ask", :width => "90px" do
download SO_URL + "/search?s=" + @lookup.text do |s|
doc = Hpricot(s.response.body)
@rez.clear()
(doc/:a).each do |l|
href = l["href"]
if href.to_s =~ /\/questions\/[0-9]+/ then
@rez.append do
para(link(l.inner_text) { visit(SO_URL + href) })
end
end
end
@rez.show()
end
end
end
end
stack :margin => 25 do
background white, :radius => 20
@rez = stack do
end
end
@rez.hide()
end
end
Perl의 또 다른 옵션은 Ruby의 Scrapi를 기반으로하는 Web :: Scraper 입니다 . 간단하고 훌륭하고 간결한 구문으로 강력한 스크레이퍼를 데이터 구조로 직접 가져올 수 있습니다.
Java에서 HtmlUnit으로 약간의 성공을 거두었습니다 . 웹 UI에서 단위 테스트를 작성하기위한 간단한 프레임 워크이지만 HTML 스크래핑에도 유용합니다.
.NET의 또 다른 도구는 MhtBuilder입니다.
이 솔루션도 있습니다 : netty HttpClient
루비에서 Hpricot을 사용합니다. 예를 들어 이것은 HireThings 계정의 6 페이지에서 모든 책 제목을 검색하는 데 사용하는 코드 스 니펫입니다 (이 정보가 포함 된 단일 페이지를 제공하지 않는 것 같습니다).
pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
pagerange.each do |page|
resp, data = http.get "/perth_dotnet?page=#{page}"
if resp.class == Net::HTTPOK
(Hpricot(data)/"h3 a").each { |a| puts a.innerText }
end
end
end
거의 완성되었습니다. 이 앞에 오는 것은 라이브러리 가져 오기 및 프록시 설정입니다.
나는 Beautiful Soup을 파이썬과 함께 많이 사용했습니다. HTML의 형식이 잘못되어 있어도 DOM을 사용하는 것처럼 작동하기 때문에 정규식 검사보다 훨씬 낫습니다 . 정규식보다 간단한 구문으로 HTML 태그와 텍스트를 빠르게 찾을 수 있습니다. 요소를 찾으면 해당 요소와 해당 하위 요소를 반복하여 정규식보다 코드의 내용을 이해하는 데 더 유용합니다. 몇 년 전에 스크린 스크래핑을 많이해야했던 Beautiful Soup이 있었으면 좋겠습니다. 사람들이 그것을 검증하기 전에 HTML 구조가 너무 열악했기 때문에 많은 시간과 두통을 아끼지 않았을 것입니다.
.NET 웹 테스트 용으로 설계되었지만 이 목적으로 WatiN 프레임 워크를 사용하고 있습니다. DOM 기반이기 때문에 HTML, 텍스트 또는 이미지를 쉽게 캡처 할 수 있습니다. 최근에는 MediaWiki All Pages 네임 스페이스 쿼리에서 Excel 스프레드 시트로 링크 목록을 덤프하는 데 사용했습니다 . 다음 VB.NET 코드 조각은 매우 조잡하지만 작동합니다.
Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)
Dim PagesLink As Link
For Each PagesLink In PagesIE.TableBodies(2).Links
With MyWorkSheet
.Cells(XLRowCounterInt, 1) = PagesLink.Text
.Cells(XLRowCounterInt, 2) = PagesLink.Url
End With
XLRowCounterInt = XLRowCounterInt + 1
Next
End Sub
HTML5 파싱 알고리즘의 구현 : html5lib (Python, Ruby), Validator.nu HTML 파서 (Java, JavaScript; 개발중인 C ++), Hubbub (C), Twintsam (C #; 예정된).
나는 LWP 와 HTML :: TreeBuilder 를 Perl과 함께 사용 했고 그것들이 매우 유용하다는 것을 알았다.
LWP (libwww-perl의 줄임말)를 사용하면 웹 사이트에 연결하고 HTML을 긁을 수 있습니다. 여기에서 모듈을 얻을 수 있으며 O'Reilly 책 은 온라인 상태 인 것 같습니다 .
TreeBuilder를 사용하면 HTML에서 트리를 구성 할 수 있으며 HTML 구문 트리를 작성하는 HTML :: TreeBuilder-Parser 에서 문서와 소스를 사용할 수 있습니다 .
그래도이 방법과 관련하여 너무 많은 노력이 필요할 수 있습니다. 다른 답변에서 제안한 Mechanize 모듈을 보지 않았 으므로 잘 수행 할 수 있습니다.
브라우저 만 사용하여 클라이언트 측에서 수행하려면 jcrawl.com이 있습니다. 웹 응용 프로그램 ( http://www.jcrawl.com/app.html ) 에서 스크랩 핑 서비스를 설계 한 후 생성 된 스크립트를 HTML 페이지에 추가하기 만하면 데이터를 사용 / 표시 할 수 있습니다.
모든 폐기 로직은 JavaScript를 통해 브라우저에서 발생합니다. 도움이 되셨기를 바랍니다. Yahoo 테니스에서 최신 뉴스 를 추출하는 라이브 예제를 보려면이 링크를 클릭하십시오 .
당신은 아마 이미 많은 것을 가지고 있지만, 이것이 당신이하려는 일이라고 생각합니다.
from __future__ import with_statement
import re, os
profile = ""
os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
for line in f:
profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")
Google 스프레드 시트의 ImportXML (URL, XPath) 기능이 마음에 듭니다.
XPath 표현식이 둘 이상의 값을 리턴하면 열 아래로 셀을 반복합니다.
importxml()
하나의 스프레드 시트에서 최대 50 개의 기능을 사용할 수 있습니다 .
RapidMiner의 웹 플러그인도 사용하기 매우 쉽습니다. 게시물을 작성하고 쿠키를 허용하며 user-agent를 설정할 수 있습니다 .