Во-первых, я знаю, что в StackOverflow уже есть много вопросов, касающихся python и lxml, и я прочитал большинство из них, если не все.Сейчас я ищу более исчерпывающий ответ на этот вопрос.
Я выполняю некоторые преобразования HTML, и мне нужно грамматически проанализировать HTML, а затем внести некоторые изменения содержимого в href
, img
и т. Д..
Это упрощенная версия того, что у меня есть сейчас:
with open(fileName, "r") as inFile:
inputS = inFile.read()
myTree = fromstring(inputS) #parse etree from HTML content
breadCrumb = myTree.get_element_by_id("breadcrumb") #a list of elements with matching id
breadCrumbContent = breadCrumb[0].text_content().strip() #text content of bread crumb
h1 = myTree.xpath('//h1') #another way, get elements by xpath
h1Content = h1[0].text_content().strip() #get text content
getTail = myTree.cssselect('table.results > tr > td > a + span + br') #get list of elements using css select
Так что в основном это то, что я знаю на данный момент.Есть ли другие способы получить элементы / атрибуты, используя lxml?Я знаю, что они могут быть не лучшим способом сделать это, но терпите меня, я новичок во всем этом.
Следующее - это то, что я хочу сделать.У меня есть:
<img src="images/macmail10.gif" alt="" width="555" height="485" /><br />
<a href="http://www.some_url.com/faq/general_faq.html" target="_blank">General FAQs page</a>
Они могут быть вложены в другие элементы, такие как div
, p
.Что я хочу сделать, так это программно искать эти элементы;для изображения я хочу извлечь src
, сделать некоторые манипуляции с ним и установить src
на что-то другое (например, src="images/something.jpg"
в src="something_images.jpg"
), то же самое с href
, я хочу изменитьчтобы указать на другое место.
Кроме этого, я также хочу удалить некоторые элементы из дерева, чтобы упростить его, например:
<head>
<title>something goes here</title>
</head>
<div>
<p id="some_p"> Some content </p>
</div>
Я хотел бы удалитьголовной узел и div, я смог бы получить p с id="some_p"
, есть ли способы получить родительский элемент?Есть ли способ удалить эти элементы?(в этом случае найдите head
, удалите head
, а затем найдите id="some_p"
, получите parent
и удалите его.
Спасибо!
========================================================
ОБНОВЛЕНИЕ: Я уже нашел решение этой проблемы и уже закончил кодирование с использованием lxml.etree. Я опубликую ответ на него, как только мне позволит stackoverflow. Я искренне надеюсь, что ответ на этот вопрос поможет другим людям.когда им приходится иметь дело с разбором HTML!