2013-08-20 2 views
0

Я пытаюсь получить все URL-адреса с id='revSAR' из HTML тега ниже, используя Python регулярное выражение:Как извлечь URL из этого тега HTML?

<a id='revSAR' href='http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending' class='txtsmall noTextDecoration'> 
    See all 136 customer reviews 
</a> 

Я попытался следующий код, но он не работает (он ничего не печатает):

regex = b'<a id="revSAR" href="(.+?)" class="txtsmall noTextDecoration">(.+?)</a>' 
pattern=re.compile(regex) 
rev_url=re.findall(pattern,txt) 
print ('reviews url: ' + str(rev_url)) 
+0

Пример разбора 'Ā' связи с Beautiful Soup: https://groups.google.com/forum/?fromgroups#!topic/beautifulsoup/8TbctreqvSI – Paul

+0

Или http://stackoverflow.com/questions/1080411/retrieve-links-from-web-page-using-python-and-beautiful-soup – Paul

ответ

0

Вам не нужно, чтобы соответствовать этим ненужные части, как id=..., href=..., Попробуйте это:

regex = 'http://.*\'\s+'

+0

Поскольку на странице отзывов об амазонах есть несколько URL-адресов, я хотел бы извлечь только URL-адрес для тега, начинающегося с этого id < a id = 'revSAR' –

1

Вы могли бы попробовать что-то вроде

(_, url), = re.findall(r'href=([\'"]*)(\S+)\1', input) 
print url 

Однако, лично я предпочел бы использовать HTML разборе библиотеки как BeautifulSoup для задачи, как это.

+0

Будет ли BeautiflSoup работать для Windows? Как установить и настроить под python 33 и заставить его работать? –

+0

Я не в Windows, поэтому я никогда не делал этого, но у этого сообщения есть советы по установке BeautifulSoup в Windows: [Как установить красивый суп 4 с python 2.7 на windows] (http://stackoverflow.com/ вопросы/12228102/как в установке-красивый-суп-4-с-питон-2-7-на-окна) –

0

Во-первых, почему ваше регулярное выражение не сработало? В вашем html атрибуты цитируются с использованием одинарных кавычек, где, как и в регулярном выражении, используются двойные кавычки. И вам нужно только заботиться об атрибуте href. Попробуйте что-то вроде href=['"](.+?)['"] как регулярное выражение, и было бы лучше, если бы вы использовали переключатель игнорирования case

Но опять-таки его очень плохое решение проанализировать html с помощью регулярного выражения. Перейдите через this

0

Описания

Это exprssion будет:

  • находки якорных тегов
  • требуют тега привязки иметь атрибут ID со значением revSAR
  • будет фиксировать значение HREF атрибута , не включая любые окружающие цитаты, если они существуют
  • будет захватывать внутренний текст и обрезать белый пространство
  • позволит атрибутам появляться в любом порядке
  • позволяет атрибутам иметь двойные кавычки, одинарные кавычки или без кавычек
  • избежать многие крайних случаев, которые часто подножки регулярных выражений при сопоставлении шаблона HTML

<a(?=\s|>)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sid=(['"]?)revSAR\1(?:\s|>)) (?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref=(['"]?)(.*?)\2(?:\s|>))(?:[^>=]|='(?:[^']|\\')*'|="(?:[^"]|\\")*"|=[^'"][^\s>]*)*>\s*(.*?)\s*<\/a>

enter image description here

Примеры

Демо

Образец текст

Примечания первых тегов пара анкерных здесь есть некоторые действительно сложные случаи края.

<a onmouseover=' id="revSAR" ; href="http://www.NotYourURL.com" ; if (3 <href&& href="http://www.NotYourURL.com" && 6>3) { funRotate(href) ; } ; ' href='http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending' class='txtsmall noTextDecoration'> 
  You shouldn't find me 
</a> 



<a onmouseover=' img = 10; href="http://www.NotYourURL.com" ; if (3 <href&& href="http://www.NotYourURL.com" && 6>3) { funRotate(href) ; } ; ' id='revSAR' href='http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending' class='txtsmall noTextDecoration'> 
    See all 111 customer reviews 
</a> 


<a id='revSAR' href='http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending' class='txtsmall noTextDecoration'> 
    See all 136 customer reviews 
</a> 

Матчей

Группа 0 получает весь якорный тег
Группы 1 получает котировку окружающей идентификатора атрибут, который используется позже, чтобы найти правильную цитату закрытия
Группы 2 получает котировку окружающую атрибут href, который используется позже, чтобы найти правильную цитату закрытия
Группа 3 получает значение атрибута href, не включая кавычки Группа 4 получает внутренний текст, не включая окружающие whitespac е

[0][0] = <a onmouseover=' img = 10; href="http://www.NotYourURL.com" ; if (3 <href&& href="http://www.NotYourURL.com" && 6>3) { funRotate(href) ; } ; ' id='revSAR' href='http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending' class='txtsmall noTextDecoration'> 
    See all 111 customer reviews 
</a> 
[0][1] = ' 
[0][2] = ' 
[0][3] = http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending 
[0][4] = See all 111 customer reviews 


[1][0] = <a id='revSAR' href='http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending' class='txtsmall noTextDecoration'> 
    See all 136 customer reviews 
</a> 
[1][1] = ' 
[1][2] = ' 
[1][3] = http://www.amazon.com/Altec-Lansing-inMotion-Mobile-Speaker/product-reviews/B000EDKP8U/ref=cm_cr_dp_see_all_summary?ie=UTF8&showViewpoints=1&sortBy=byRankDescending 
[1][4] = See all 136 customer reviews 
Смежные вопросы