Разбор html с запросом python

Я не программист, но мне нужно реализовать простой анализатор HTML.

После простого исследования я смог реализовать в качестве данного примера:

from lxml import html
import requests

page = requests.get('https://URL.COM')
tree = html.fromstring(page.content)

#This will create a list of buyers:
buyers = tree.xpath('//div[@title="buyer-name"]/text()')
#This will create a list of prices
prices = tree.xpath('//span[@class="item-price"]/text()')

print 'Buyers: ', buyers
print 'Prices: ', prices

Как я могу использовать tree.xpath для анализа всех слов, заканчивающихся на ".com.br" и начинающихся на ": //"

вы можете добавить фиктивный фрагмент HTML?

utks009 10.08.2018 16:11

зачем вам реализовывать свое? просто используйте BS4, вам все равно нужны внешние библиотеки, так почему бы не использовать bs4 вместо lxml?

ShellAddicted 10.08.2018 16:19

Это не то, как работает синтаксический анализ xpath - вы сначала анализируете структуру документа, а не его содержимое! Если "слова, оканчивающиеся на .com.br и начинающиеся на ://" на самом деле являются ссылками (теги <a href="...">), вы можете использовать xpath для извлечения всех ссылок, а затем отфильтровать те, которые вам нужны.

nosklo 10.08.2018 16:19
3
3
10 281
1

Ответы 1

Как указал здесь @nosklo, вы ищете теги href и связанные с ними ссылки. Дерево синтаксического анализа будет организовано самими элементами html, и вы найдете текст, специально выполнив поиск по этим элементам. Для URL-адресов это будет выглядеть так (с использованием библиотеки lxml в python 3.6):

from lxml import etree
from io import StringIO
import requests

# Set explicit HTMLParser
parser = etree.HTMLParser()

page = requests.get('https://URL.COM')

# Decode the page content from bytes to string
html = page.content.decode("utf-8")

# Create your etree with a StringIO object which functions similarly
# to a fileHandler
tree = etree.parse(StringIO(html), parser=parser)

# Call this function and pass in your tree
def get_links(tree):
    # This will get the anchor tags <a href...>
    refs = tree.xpath("//a")
    # Get the url from the ref
    links = [link.get('href', '') for link in refs]
    # Return a list that only ends with .com.br
    return [l for l in links if l.endswith('.com.br')]


# Example call
links = get_links(tree)

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