Ссылки в питоне

Я получил регулярное выражение, которое подходит для получения гиперссылок в источнике страницы.

Когда я запускаю этот кусок кода

import sys,re
import webpage_get

def print_links(page):

    print '[+] print_links()'
    links = re.findall(r'\<a.*href\=.*http\:.+',page)
    links.sort()
    print '[+]', str(len(links)), 'HyperLinks Found:'
    a = open(r'C:\Users\noh\Desktop\ApplicationDevelopment\Second Course work\result.txt','w')
    for link in links:
        a.write(link)
    a.close()

def main():
    sys.argv.append('http://socrdlvideo.napier.ac.uk/~csn11118/CSN08115/index.html')
##    sys.argv.append('http://www.napier.ac.uk/Pages/home.aspx')

    if len(sys.argv) != 2:
        print '[-] usage: webpage_getlinks URL'
        return

    page = webpage_get.wget(sys.argv[1])
    print_links(page)

if __name__ == '__main__':
    main()

Результат будет похож на это:

href="http://www.rottentomatoes.com/m/star_wars/trailer/">Star Wars Trailer</a>

Что мне действительно нужно, так это просто сама ссылка без строк добавления с обеих сторон, например:

http://www.rottentomatoes.com/m/star_wars/trailer/

Было бы замечательно, если бы вы сказали мне, как избавиться от дополнительных строк с обеих сторон.

3 ответа

Решение

Попробуйте это регулярное выражение:

(?<=href=\")http.*?\/(?=\")

Или этот:

http.*?\/(?=\")

Демо: https://regex101.com/r/YXw2y5/1

Итак, в вашем коде измените эту строку:

links = re.findall(r'\<a.*href\=.*http\:.+',page)

к этому:

links = re.findall(r'(?<=href=\")http.*?\/(?=\")',page)

Проблема в том, что ваш шаблон не может быть проанализирован правильно.

использовать шаблон: href\=.*(http\:.+)\" замещать <a.*href\=.*http\:.+

Попробуйте использовать этот шаблон: https://regex101.com/r/WT1AQ7/1

PS: используя () сгруппировать фактическую вещь, которую вы хотите.

re.findall(r'href="(http.+?)"', string=your string)

использовать (), чтобы захватить хотите ваши потребности

import re
file = '''
 href="https://creativecommons.org/licenses/by-sa/3.0/" rel="license">cc by-sa 3.0</a> 
                with <a href="http://blog.stackru.com/2009/06/attribution-required/" rel="license">attribution required</a> '''
matchs = re.findall(r'href="(http.+?)"', string=file)
for link in matchs:
    print(link)

из:

https://creativecommons.org/licenses/by-sa/3.0/
http://blog.stackru.com/2009/06/attribution-required/

код работает!! пожалуйста, изучите регулярные выражения, а не копируйте регулярные выражения!

Другие вопросы по тегам