Ссылки в питоне
Я получил регулярное выражение, которое подходит для получения гиперссылок в источнике страницы.
Когда я запускаю этот кусок кода
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/
код работает!! пожалуйста, изучите регулярные выражения, а не копируйте регулярные выражения!