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

Я подумываю попробовать Beautiful Soup , пакет Python для очистки HTML. Есть ли какие-нибудь другие пакеты соскоба HTML, на которые я должен обратить внимание? Python не является обязательным требованием, на самом деле мне интересно услышать и о других языках.

История до сих пор:

5.08.2008 21:09:11
Gordon 16.07.2011 08:51:46
Ссылка на тег супа не работает.
Tapper7 20.09.2016 19:03:17
HtmlUnit - это полная реализация браузера Java, которую вы не можете разбить на части (вы не можете загрузить только html-страницу и очистить ее, она загрузит все упомянутые файлы, выполнит сценарии и т. Д.). Как таковой, я не думаю, что это принадлежит здесь.
Mark Jeronimus 22.03.2020 08:27:02
Стандартная Java может использовать HTML с выражениями XPath, хотя и не без проблем. Часть анализатора (DocumentBuilder) задыхается от неправильного HTML, и 100% правильный HTML на самом деле довольно редко встречается в Интернете. Поэтому я люблю заменять парсер на JTidy . Что касается XPath, XPathExpressionможно использовать собственный Java (который существует с Java 1.5)
Mark Jeronimus 22.03.2020 11:48:55
30 ОТВЕТОВ
РЕШЕНИЕ

В мире Ruby эквивалентом Beautiful Soup является Hpricot Why_the_lucky_stiff .

63
4.03.2014 09:56:45
В эти дни ребята из Ruby перешли на Nokogiri для очистки.
Mark Thomas 4.12.2012 15:05:11

Сначала я выясню, предоставляют ли рассматриваемые сайты сервер API или RSS-каналы для доступа к нужным вам данным.

8
5.08.2008 21:11:29

Регулярные выражения также очень хорошо подходят для очистки HTML ;-) Хотя, посмотрев на Beautiful Soup, я понимаю, почему это был бы полезный инструмент.

1
5.08.2008 21:29:51
Andrew Grimm 22.08.2010 08:00:16

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

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
5.08.2008 22:58:06

Для Perl есть WWW :: Mechanize.

17
5.08.2008 23:37:44

Я использую 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
12.07.2012 18:15:19

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

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

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

36
7.08.2008 18:18:59

Я обнаружил, что HTMLSQL - это смехотворно простой способ скрэпскрипта. Требуются буквально минуты, чтобы получить результаты с этим.

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

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

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

20
7.08.2008 18:31:17
К вашему сведению, это библиотека PHP
Tristan Havelick 18.04.2010 15:19:49

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

http://www.codeplex.com/htmlagilitypack

43
7.08.2008 18:38:30
объединить с ним linq, и это больше похоже на HTMLSQL, не так ли?
Bless Yahu 22.11.2008 20:16:24
Объедините SharpQuery с ним, и он станет таким же, как jQuery! code.google.com/p/sharp-query
mpen 1.12.2010 05:34:29
HTML Agility Pack не может правильно структурировать DOM для ряда HTML-документов, которые я пробовал.
Ash Berlin-Taylor 8.08.2012 21:12:37

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

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

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

Тем не менее, может быть слишком много работы, чтобы сделать что-то подобное этому. Я не смотрел на модуль Mechanize, предложенный другим ответом, так что я вполне могу это сделать.

3
12.07.2012 18:22:42

Соскоб стек переполнение особенно легко с обувь и 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
7
22.08.2008 10:20:38

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

4
12.07.2012 18:24:20

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

3
27.09.2016 10:18:26

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

1
6.01.2016 15:55:20

Другой вариант для Perl - это Web :: Scraper, основанный на Scrapi Руби . В двух словах, с красивым и лаконичным синтаксисом, вы можете получить надежный скребок непосредственно в структуры данных.

7
12.07.2012 18:05:58

Хотя он был разработан для веб-тестирования .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
4
12.07.2012 18:25:54

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

2
27.08.2008 18:49:53

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

6
31.08.2008 12:09:33
вы также можете использовать его для оценки выполнения javascript, если у вас когда-нибудь возникнет такая необходимость :)
David 14.12.2010 16:28:03

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

18
14.05.2012 12:38:48

Вы были бы дураком, если бы не использовали Perl.

Возьмите в руки следующие модули и разбирайте гинсу.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
3
27.11.2011 16:03:56

TemplateMaker утилита от Адриана Головатого (из Джанго славы) использует очень интересный подход: Вы кормите его вариацией одной и той же страницы , и он «узнает» , где «дыра» для переменных данных является. Это не специфично для HTML, поэтому было бы неплохо также удалить любой другой текст в открытом виде. Я также использовал его для PDF и HTML, преобразованных в обычный текст (с pdftotext и lynx, соответственно).

10
18.09.2008 20:13:40
как вы работали с создателем шаблонов для больших HTML-страниц? Я обнаружил, что он падает, когда я даю ему что-нибудь нетривиальное.
hoju 30.01.2010 14:11:43
Я полагаю, у меня не было больших HTML-страниц. Похоже, никаких проблем не существует по адресу code.google.com/p/templatemaker/issues/list, поэтому, вероятно, целесообразно отправить туда тестовый пример. Не похоже, что Адриан поддерживает библиотеку. Интересно, что он использует в настоящее время в EveryBlock, так как они, безусловно, много скребут.
akaihola 3.02.2010 08:18:19

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

3
9.10.2008 20:53:21

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

2
12.07.2012 18:27:48

Еще одним инструментом для .NET является MhtBuilder

5
13.02.2009 12:58:01

«Простой HTML DOM Parser» - хороший вариант для PHP, если вы знакомы с jQuery или JavaScript-селекторами, вы окажетесь дома.

Найдите это здесь

Об этом также есть запись в блоге.

13
31.07.2009 19:39:57
Я второй этот. Не нужно устанавливать какой-либо mod_python и т. Д. На веб-сервер только для того, чтобы он работал
Brock Woolf 21.03.2010 13:24:08

Я знаю и люблю 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

Три редакции экрана-скребка:

* 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
12.07.2012 18:10:05
К сожалению, даже базовая версия не является FOSS. Это только кажется бесплатным, как в пиве.
Andreas Kuckartz 22.04.2014 04:55:23

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

  • механизировать : аналогично Perl WWW:Mechanize. Дает вам подобный браузеру объект, чтобы взаимодействовать с веб-страницами
  • lxml : привязка Python к libwww. Поддерживает различные опции для перемещения и выбора элементов (например, выбор XPath и CSS)
  • scrapemark : библиотека высокого уровня, использующая шаблоны для извлечения информации из HTML.
  • pyquery : позволяет вам делать jQuery как запросы к XML-документам.
  • scrapy : высокоуровневая система очистки и веб-сканирования. Его можно использовать для написания пауков, для интеллектуального анализа данных, а также для мониторинга и автоматического тестирования.
15
24.06.2018 15:26:54
В стандартной библиотеке Python есть встроенный анализатор HTML ... почему бы просто не использовать это? docs.python.org/2.7/library/htmlparser.html
ArtOfWarfare 20.07.2015 20:29:20

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

1
17.05.2010 15:58:39

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

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

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

Веб-плагин RapidMiner также довольно прост в использовании. Он может создавать сообщения, принимать файлы cookie и настраивать пользовательский агент .

2
27.11.2011 16:16:50

Недавний разговор Дэва Гласса Добро пожаловать в джунгли! (Открытое выступление YUIConf 2011) показывает, как можно использовать YUI 3 в Node.js для выполнения программирования на стороне клиента (с селекторами DOM вместо обработки строк) на сервере. Это очень впечатляет.

1
27.11.2011 16:19:01