Можно выбрать <a>с конкретным текстом в кавычках? - PullRequest
1 голос
/ 15 июня 2019

Я пытаюсь очистить html, но, к сожалению, очень мало классов и идентификаторов. Используемые классы не согласованы от страницы к странице. На странице их несколько.

У меня есть кое-что конкретное, что мне нужно взять.

<a href="http://ExampleText.com/xyz">

и

Содержимое адресов электронной почты и URL будет меняться, но всегда будет <a href "http://ExampleText.com и <a href="mailto:

.

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

label_links = label_soup.select("div.row  a")
print(label_links)

Я все еще новичок в Beautifulsoup, но я не вижу этого в литературе (пока). Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Вы можете использовать attribute = value css селектор с запусками с оператором ^

links = [item['href'] for item in soup.select('[href^="http://ExampleText.com/"]')]
links2 = [item['href'] for item in soup.select('[href^="mailto:"]')]

[attr ^ = value]

Представляет элементы симя атрибута attr, чье значение имеет префикс (предшествует) значению.

0 голосов
/ 15 июня 2019

re.compile () возвращает объект регулярного выражения , что означает, что h является объектом регулярного выражения.

Объект регулярного выражения имеет свое собственное совпадение метод с необязательными параметрами pos и endpos: regex.match (string [, pos [, endpos]])

from bs4 import BeautifulSoup
import re

html = '''
    <div>
    <a href="http://ExampleText.com/xyz">
    <a href="mailto:example@email.com">
    <div>
'''

soup = BeautifulSoup(html, "html.parser")
links = soup.find_all("a",href=True)

def is_valid_url(url):
    regex = re.compile(
        r'^https?://'  # http:// or https://
        r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|'  # domain...
        r'localhost|'  # localhost...
        r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
        r'(?::\d+)?'  # optional port
        r'(?:/?|[/?]\S+)$', re.IGNORECASE)

    return url is not None and regex.search(url)

for i in links:
    _href = i['href']
    is_url = is_valid_url(_href)

    if is_url is not None:
        print("Website link -> ",_href)
    else:
        print("Email address -> ",_href.split(":")[1])

O / P:

Website link ->  http://ExampleText.com/xyz
Email address ->  example@email.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...