Варианты соскоба HTML? [закрыто]

399
задан 38 revs, 30 users 17% 31 August 2018 в 22:28
поделиться

29 ответов

Ruby эквивалент в мире Красивому Супу является why_the_lucky_stiff Hpricot.

62
ответ дан 2 revs, 2 users 86% 31 August 2018 в 22:28
поделиться

У Вас, вероятно, уже есть столько же, но я думаю, что это - то, что Вы пытаетесь сделать:

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")
2
ответ дан Grant 31 August 2018 в 22:28
поделиться

BeautifulSoup является отличным способом пойти для очистки HTML. Мое предыдущее задание имело меня делающий большую очистку, и мне жаль, что я не знал о BeautifulSoup, когда я запустил. Это похоже на DOM с намного более полезными опциями и является намного большим количеством pythonic. Если Вы хотите попробовать Ruby, они портировали BeautifulSoup, назвав его RubyfulSoup, но он не был обновлен в некоторое время.

Другие полезные инструменты являются HTMLParser или sgmllib. SGMLParser, которые являются частью стандартной библиотеки Python. Они работают вызывающими методами каждый раз, когда Вы вводите/выходите тег и встречаетесь с текстом HTML. Они похожи на Эмигранта, если Вы знакомы с этим. Эти библиотеки особенно полезны, если бы Вы собираетесь проанализировать очень большие файлы и создаете дерево DOM, было бы длинным и дорогим.

Регулярные выражения не очень необходимы. BeautifulSoup обрабатывает регулярные выражения поэтому при необходимости в их питании, можно использовать его там. Я говорю, идут с BeautifulSoup, если Вам не нужны скорость и меньший объем потребляемой памяти. При нахождении лучшего синтаксического анализатора HTML на Python сообщить мне.

35
ответ дан Cristian 31 August 2018 в 22:28
поделиться

Я нашел HTMLSQL быть смехотворно простым путем к screenscrape. Требуются буквально минуты для получения результатов с ним.

запросы суперинтуитивны - как:

SELECT title from img WHERE $class == 'userpic'

существуют теперь некоторые другие альтернативы, которые проявляют тот же подход.

19
ответ дан deadprogrammer 31 August 2018 в 22:28
поделиться

Для Perl существует WWW:: Механизировать.

16
ответ дан andrewrk 31 August 2018 в 22:28
поделиться

Я сначала узнал бы, обеспечивает ли рассматриваемый сайт (сайты) сервер API или Каналы RSS для доступа данные, Вы требуете.

8
ответ дан GateKiller 31 August 2018 в 22:28
поделиться

Я использую Hpricot на Ruby. Как пример это - отрывок кода, который я использую для получения всех книжных заголовков от шести страниц моей учетной записи HireThings (поскольку они, кажется, не предоставляют единственной странице эту информацию):

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 

Это в значительной степени завершено. Все, что прибывает, прежде чем это - импорт библиотеки и настройки для моего прокси.

4
ответ дан 3 revs, 3 users 81% 31 August 2018 в 22:28
поделиться

В мире.NET я рекомендую Пакет Гибкости HTML. Не рядом столь же простой как некоторые вышеупомянутые опции (как HTMLSQL), но это очень гибко. Это позволяет Вам, maniuplate плохо сформировал HTML, как будто это было хорошо сформировано XML, таким образом, можно использовать XPath или просто itereate по узлам.

http://www.codeplex.com/htmlagilitypack

42
ответ дан Jon Galloway 31 August 2018 в 22:28
поделиться

Регулярные выражения работают вполне прилично на HTML, очищающий также ;-) Хотя после рассмотрения Красивого Супа, я вижу, почему это было бы ценным инструментом.

1
ответ дан pix0r 31 August 2018 в 22:28
поделиться

Другая опция для Perl была бы сеть:: Скребок , который основан на Ruby Scrapi. Короче говоря с хорошим и кратким синтаксисом можно получить устойчивый скребок непосредственно в структуры данных.

7
ответ дан 6 revs, 3 users 50% 31 August 2018 в 22:28
поделиться

Хотя это было разработано для .NET тестирование сети, я использовал платформа WatiN с этой целью. Так как это основано на DOM, довольно легко получить HTML, текст или изображения. Recentely, я использовал его для дампа списка ссылок от MediaWiki Весь запрос пространства имен Страниц в электронную таблицу Excel. Следующий VB.NET код fragement довольно сыр, но он работает.

<час>
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
4
ответ дан 2 revs, 2 users 79% 31 August 2018 в 22:28
поделиться
  • 1
    Спасибо, но я don' t хотят скопировать каталог - только файлы в нем. Теперь я получаю сообщения об ошибках java.io. FileNotFoundException: (путь к trDir) (Каталог) Это - то, что это только говорит. Я использовал метод как это: copyDirectory (обзор, trDir); – user42155 18 July 2009 в 21:48

Scrubyt использует Ruby и Hpricot, чтобы сделать хорошую и легкую веб-очистку. Я записал скребок для услуг библиотеки своего университета с помощью этого приблизительно в 30  минуты.

1
ответ дан 3 revs, 3 users 60% 31 August 2018 в 22:28
поделиться
  • 1
    @ripper234: ссылка зафиксирована. Обратите внимание, что я нашел новую ссылку путем ввода " java nio2" в Google... – Michael Borgwardt 8 September 2011 в 04:54

Очистка Переполнения стека особенно легка с Обувь и 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
6
ответ дан Frank Krueger 31 August 2018 в 22:28
поделиться

Я имел некоторый успех с HtmlUnit в Java. Это - простая платформа для записи модульных тестов на веб-UI, но одинаково полезный для очистки HTML.

6
ответ дан Henry 31 August 2018 в 22:28
поделиться

У меня были смешанные результаты в использовании.NET SgmlReader, который был первоначально запущен Chris Lovett и, кажется, был обновлен MindTouch.

2
ответ дан Shawn Miller 31 August 2018 в 22:28
поделиться
  • 1
    It' s в основном то же самое, нет? Все файлы из исходного каталога закончатся в целевой каталог. – Stu Thompson 19 July 2009 в 00:26

Я использовал LWP и HTML:: TreeBuilder с Perl и нашел их очень полезными.

LWP (короткий для libwww-perl) позволяет Вам соединиться с веб-сайтами и очистить HTML, можно получить модуль здесь , и книга O'Reilly, кажется, онлайн здесь .

TreeBuilder позволяет Вам создавать дерево из HTML, и , документация и источник доступны в HTML:: TreeBuilder - Синтаксический анализатор, который создает синтаксическое дерево HTML .

могло бы быть слишком много тяжелого подъема все еще, чтобы сделать с чем-то вроде этого подход все же. Я не посмотрел эти , Механизируют модуль предложенный другим ответом, таким образом, я могу сделать это.

3
ответ дан 3 revs, 2 users 59% 31 August 2018 в 22:28
поделиться

Я использовал Красивый Суп много с Python. Это намного лучше, чем проверка регулярного выражения, потому что это работает как использование DOM, даже если HTML плохо отформатирован. Можно быстро найти HTML-тэги и текст с более простым синтаксисом, чем регулярные выражения. После того как Вы находите элемент, можно выполнить итерации по нему и его детям, который более полезен для понимания содержания в коде, чем это с регулярными выражениями. Мне жаль, что Красивый Суп не существовал несколько лет назад, когда я должен был сделать много screenscraping - он сохранит меня много времени и головной боли, так как структура HTML была так плоха, прежде чем люди начали проверять его.

4
ответ дан 2 revs, 2 users 67% 31 August 2018 в 22:28
поделиться
  • 1
    renameTo () требует как параметр объект Файла представление сам файл в его новом каталоге - не тот каталог. – Michael Borgwardt 18 July 2009 в 20:11

В Java можно использовать TagSoup.

3
ответ дан 2 revs 31 August 2018 в 22:28
поделиться
  • 1
    Но wouldn' t, которые на самом деле перемещают файл вместо того, чтобы копировать его? – Joey 18 July 2009 в 10:59

Вы были бы дураком для не использования Perl.. Здесь приезжайте провокационные сообщения..

Кость на следующих модулях и ginsu любое царапанье вокруг.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
3
ответ дан 2 revs, 2 users 67%crojac 31 August 2018 в 22:28
поделиться

Библиотека lxml Python действует как привязка Pythonic для libxml2 и libxslt библиотек. Мне нравятся особенно его поддержка XPath и симпатичная печать структуры XML в оперативной памяти. Это также поддерживает анализирующий поврежденный HTML. И я не думаю, что можно найти другие библиотеки/привязку Python, которые анализируют XML быстрее, чем lxml.

17
ответ дан 2 revs 31 August 2018 в 22:28
поделиться
  • 1
    Я использую Ubuntu 8.10, таким образом, этот shouldn' t быть проблемой. – user42155 18 July 2009 в 23:18

утилита templatemaker от Adrian Holovaty ( известность Django ) использует очень интересный подход: Вы подаете его изменения той же страницы, и это "изучает", где "дыры" для переменных данных. Это не конкретный HTML, таким образом, это было бы хорошо для очистки любого другого содержания простого текста также. Я использовал его также для PDFs и HTML, преобразованного в простой текст (с pdftotext и рысью, соответственно).

10
ответ дан akaihola 31 August 2018 в 22:28
поделиться

Реализации алгоритм парсинга HTML5 : html5lib (Python, Ruby), Синтаксический анализатор HTML Validator.nu (Java, JavaScript; C++ в разработке), Гвалт (C), Twintsam (C#; предстоящий).

3
ответ дан hsivonen 31 August 2018 в 22:28
поделиться

Я также имел большой успех с помощью Jaxer Aptana + jQuery для парсинга страниц. Это не так быстро или 'подобно сценарию' по своей природе, но селекторы jQuery +, реальный JavaScript/DOM является спасителем на более сложном (или уродливый) страницы.

2
ответ дан 2 revs, 2 users 50% 31 August 2018 в 22:28
поделиться

Другой инструмент для.NET MhtBuilder

5
ответ дан GeekyMonkey 31 August 2018 в 22:28
поделиться

'Simple HTML DOM Parser' - хороший вариант для PHP, если вы знакомы с селекторами jQuery или JavaScript, тогда вы почувствуете себя как дома.

Найти здесь

Есть также сообщение об этом в блоге здесь.

13
ответ дан 22 November 2019 в 23:40
поделиться

Я знаю и люблю Screen-Scraper .

Screen-Scraper - это инструмент для извлечения данных с веб-сайтов. 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

Три версии screen-scraper:

* 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.
9
ответ дан 22 November 2019 в 23:40
поделиться

В дополнение к Beatiful Soup, в Python есть несколько опций для HTML-скрейпинга. Вот некоторые другие:

  • Mechanize: аналогично perl WWW:Mechanize. Дает браузеру подобный объект для инертной работы с web-страницами
  • lxml: Привязка питона к libww. Поддерживает различные опции перемещения и выбора элементов (например, XPath и выбор CSS)
  • scrapemark: библиотека высокого уровня, использующая шаблоны для извлечения информации из HTML.
  • pyquery: позволяет делать запросы типа jQuery на XML документах.
  • scrapraprap: фреймворк для высокоуровневого сканирования и веб-ползаний. Может использоваться для записи пауков, для интеллектуального анализа данных, а также для мониторинга и автоматизированного тестирования
15
ответ дан 22 November 2019 в 23:40
поделиться

Мне нравится функция ImportXML(URL, XPath) Google Spreadsheets.

Она будет повторять ячейки в столбце, если выражение XPath возвращает более одного значения.

В одной электронной таблице можно использовать до 50 функций importxml().

Веб-плагин RapidMiner также довольно прост в использовании. Он может делать посты, принимает cookies и может устанавливать user-agent.

2
ответ дан 22 November 2019 в 23:40
поделиться

Для более сложных приложений парсинга я бы порекомендовал парсер IRobotSoft. Это специальная бесплатная программа для очистки экрана. Он имеет мощный язык запросов для HTML-страниц и очень простой интерфейс веб-записи, который избавит вас от многих усилий по программированию.

1
ответ дан 22 November 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: