Python - найти подстроку между двумя строками, основываясь на последнем вхождении более поздней строки - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь найти подстроку между строками.Первая строка - <br>, а последняя - <br><br>.Первая строка, которую я ищу, является повторяющейся, в то время как более поздняя строка может служить в качестве якоря.

Вот пример:

<div class="linkTabBl" style="float:left;padding-top:6px;width:240px">
    Anglo American plc
    <br>
    20 Carlton                 House Terrace
    <br>
    SW1Y 5AN London
    <br>
    United Kingdom
    <br><br>
    Phone : +44 (0)20 7968 8888
    <br>
    Fax : +44 (0)20 7968 8500
    <br>
    Internet : 
    <a class="pageprofil_link_blue" href="http://www.angloamerican.com" target="_blank">
        http://www.angloamerican.com
    </a>
    <br>
</div>

Я пытаюсь получить "Великобритания".Я хотел бы получить эту строку с помощью строковых манипуляций, но также был бы заинтересован, если бы кто-нибудь мог получить ее с Beautifulsoup (в идеале, используя css_selector).

Всего наилучшего.

Веб-страница

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Вы можете получить это, используя регулярное выражение и строку HTML.

import requests, re

r = requests.get('https://www.marketscreener.com/ANGLO-AMERICAN-PLC-4007113/company/', headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'})

reg = re.search(r'<br>([\w\s]+)<br><br>', r.text).group(1)
print(reg)
0 голосов
/ 27 сентября 2019
import re

html = """<div class="linkTabBl" style="float:left;padding-top:6px;width:240px">
    Anglo American plc
    <br>
    20 Carlton                 House Terrace
    <br>
    SW1Y 5AN London
    <br>
    United Kingdom
    <br><br>
    Phone : +44 (0)20 7968 8888
    <br>
    Fax : +44 (0)20 7968 8500
    <br>
    Internet : 
    <a class="pageprofil_link_blue" href="http://www.angloamerican.com" target="_blank">
        http://www.angloamerican.com
    </a>
    <br>
</div>"""

res = re.findall(r'<br>\n    ([a-zA-Z\s]+)?\n    <br><br>', html)

print(res)

Примечание: "\ n" - это новая строка и 4 пробела от <'br'> до того, что вы ищете, до <'br'> снова,Так что если у вас есть что-то вроде этого:

...
<br>United Kingdom<br><br>
...

Вы должны заменить

res = re.findall(r'<br>\n ([a-zA-Z\s]+)?\n <br><br>', html)

на

res = re.findall(r'<br>([a-zA-Z\s]+)?<br><br>', html)

Хорошие уроки регулярных выражений здесь https://regexone.com/

...