Как извлечь URL и текст ссылки из HTML в Perl?

Словарь Python был неупорядочен перед Python 3.6. В CPython реализации Python 3.6 словарь сохраняет порядок вставки. Из Python 3.7 это станет языковой функцией.

Если вы хотите отсортировать вложенный dict, включая субдиск внутри, вы можете сделать:

test_dict = {'a': 1, 'c': 3, 'b': {'b2': 2, 'b1': 1}}

def dict_reorder(item):
    return {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(item.items())}

reordered_dict = dict_reorder(test_dict)

https://gist.github.com/ligyxy/f60f0374defc383aa098d44cfbd318eb

20
задан Brad Gilbert 22 March 2011 в 17:40
поделиться

7 ответов

Посмотрите на использование WWW:: Механизируйте модуль для этого. Это выберет Ваши веб-страницы для Вас и затем даст Вам легкий к работе со списками URL.

my $mech = WWW::Mechanize->new();
$mech->get( $some_url );
my @links = $mech->links();
for my $link ( @links ) {
    printf "%s, %s\n", $link->text, $link->url;
}

Довольно простой, и если Вы надеетесь перейти к другим URL на той странице, это еще более просто.

Механик является в основном браузером в объекте.

40
ответ дан cjm 22 March 2011 в 17:40
поделиться

Мне нравится использовать pQuery для вещей как это...

use pQuery;

pQuery( 'http://www.perlbuzz.com' )->find( 'a' )->each(
    sub {
        say $_->innerHTML . q{, } . $_->getAttribute( 'href' );
    }
);

Также контроль эта предыдущая Эмуляция вопроса о stackoverflow.com закона как функциональность в Perl или Python для подобных ответов.

6
ответ дан Community 22 March 2011 в 17:40
поделиться

Другой способ сделать это должно использовать XPath для запросов проанализированного HTML. Это необходимо в сложных случаях, как извлечение все ссылки в отделении с определенным классом. Используйте HTML:: TreeBuilder:: XPath для этого.

  my $tree=HTML::TreeBuilder::XPath->new_from_content($c);
  my $nodes=$tree->findnodes(q{//map[@name='map1']/area});
  while (my $node=$nodes->shift) {
    my $t=$node->attr('title');
  }
5
ответ дан Alexandr Ciornii 22 March 2011 в 17:40
поделиться

Sherm рекомендовал HTML:: LinkExtor, который является почти, что Вы хотите. К сожалению, это не может возвратить текст в < тег a>.

Andy рекомендовал WWW:: Механизируйте . Это - вероятно, лучшее решение.

, Если Вы находите что WWW:: Механизируйте не к Вашей симпатии, попробуйте HTML:: TreeBuilder. Это создаст подобное DOM дерево из HTML, который можно тогда искать ссылки, Вы хотите и извлекаете любое соседнее содержание, которое Вы хотите.

4
ответ дан Community 22 March 2011 в 17:40
поделиться

HTML является структурированным языком разметки, который должен быть проанализирован для извлечения его значения без ошибок. Модуль, который перечислил Sherm, проанализирует HTML и извлечет ссылки для Вас. Специальные основанные на регулярном выражении решения могли бы быть приемлемыми, если Вы знаете, что Ваши исходные данные будут всегда формироваться тот же путь (не забывайте атрибуты), но синтаксический анализатор является почти всегда правильным ответом для обработки структурированного текста.

2
ответ дан converter42 22 March 2011 в 17:40
поделиться

Или рассмотрите HTML улучшения:: LinkExtor, чтобы сделать то, что Вы хотите, и представление изменений в авторе.

4
ответ дан ysth 22 March 2011 в 17:40
поделиться

Взгляните на HTML:: LinkExtractor и HTML:: LinkExtor, часть HTML:: Синтаксический анализатор пакет.

HTML:: LinkExtractor подобен HTML:: LinkExtor, за исключением того, что помимо получения URL, Вы также получаете текст ссылки.

11
ответ дан Yaakov Belch 22 March 2011 в 17:40
поделиться
Другие вопросы по тегам:

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