2016-06-18 1 views
0

Я новичок в python, но до сих пор наслаждаюсь языком.Python BeautifulSoup html5lib mix, похоже, удаляет каждый другой элемент в цикле

Я создавал кучу сложных элементов html5 и использовал модуль html5lib.

Когда я просматриваю элементы в параграфе, я могу распечатать их в порядке, но когда я пытаюсь использовать метод вставки bs4, я получаю только получение каждого другого элемента, и я не знаю почему!

Мой питон:

i = 0 
    for gallery_elem in gallery_header_next_sibling: 
     if (gallery_elem.name.lower() == 'img'): 
      if (i == 0): 
       new_gallery = soup.new_tag("div") 
       new_gallery[ "class" ] = "gallery" 

      new_gallery_elem = soup.new_tag("figure") 

      if (gallery_elem.has_attr("alt")): 
       new_gallery_cap = soup.new_tag("figcaption") 
       new_gallery_cap.string = gallery_elem[ "alt" ] 
       new_gallery_elem.insert(2, new_gallery_cap) 

      if (gallery_elem.has_attr("title")): 
       new_gallery_attribution = soup.new_tag("dl") 
       new_gallery_attribution_dt = soup.new_tag("dt") 
       new_gallery_attribution_dt.string = "Image owner:" 
       new_gallery_attribution_dd = soup.new_tag("dd") 
       new_gallery_attribution_dd.string = gallery_elem[ "title" ] 
       new_gallery_attribution.insert(0, new_gallery_attribution_dt) 
       new_gallery_attribution.insert(1, new_gallery_attribution_dd) 

     new_gallery_elem.insert(1, new_gallery_attribution) 
     new_gallery_elem.insert(1, gallery_elem) 
     i = i + 1 

    new_gallery_elem.insert(1, gallery_elem) 

HTML-

<img alt="Caption One." src="img/orange.jpg" title="Attribution One."/> 
<img alt="Caption Two." src="img/red.jpg" title="Attribution Two."/> 
<img alt="Caption Three." src="img/urban.jpg" title="Attribution Three."/> 
<img alt="Caption Four." src="img/brolly.jpg" title="Attribution Four."/> 
<img alt="Caption Five." src="img/tomy.jpg" title="Attribution Five."/> 

Выход:

<figure><figcaption>Caption One.</figcaption><img alt="Caption One." src="img/orange.jpg" title="Attribution One."/><dl><dt>Image owner:</dt><dd>Attribution One.</dd></dl></figure> 
<figure><figcaption>Caption Three.</figcaption><img alt="Caption Three." src="img/urban.jpg" title="Attribution Three."/><dl><dt>Image owner:</dt><dd>Attribution Three.</dd></dl></figure> 
<figure><figcaption>Caption Five.</figcaption><img alt="Caption Five." src="img/tomy.jpg" title="Attribution Five."/><dl><dt>Image owner:</dt><dd>Attribution Five.</dd></dl></figure> 

Если я дергать следующую строку я получаю все пять элементов. Кто-нибудь знает, что я делаю неправильно?

new_gallery_elem.insert(1, gallery_elem) 

ответ

0

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

Как только у меня были созданы и сохранены объекты, я мог бы добавить их обратно в родительский элемент, который я ранее создал и вставил в суп.

Я надеюсь, что это решает некоторые преждевременные облысения для кого-то другого ...