2014-12-26 4 views
1

В настоящее время я пытаюсь получить данные из html-файла. Похоже, что код, который я использую, работает, но не так, как я ожидаю. Я могу получить некоторые элементы, но не все, и мне интересно, связано ли это с размером файла, который я пытаюсь прочитать.Python и lxml.html get_element_by_id вопросы вывода

В настоящее время я пытаюсь проанализировать источник this webpage.

Эта страница представляет собой 4500 строк, поэтому это довольно хороший размер. Я использую эту страницу, так как хочу, чтобы код работал на больших файлах.

код я использую:

import lxml.html 
import lxml 
import urllib2 

webHTML = urllib2.urlopen('http://hobbyking.com/hobbyking/store/__39036__Turnigy_Multistar_2213_980Kv_14Pole_Multi_Rotor_Outrunner.html').read() 
webHTML = lxml.html.fromstring(webHTML) 
productDetails = webHTML.get_element_by_id('productDetails') 
for element in productDetails: 
    print element.text_content() 

Это дает ожидаемый результат, когда я использую ELEMENT_ID из «мм3» или что-то близко к вершине, но если я использую ELEMENT_ID из «» Я Детали изделия получить нет выхода. По крайней мере, я нахожусь в моей текущей настройке.

ответ

1

Боюсь, что lxml.html не может обрабатывать разбор данного HTML-источника. Он разбирает h3 тег id="productDetails" как пустой элемент (и это в default "recover" mode):

<h3 class="productDescription2" id="productDetails" itemprop="description"></h3> 

Переключить на BeautifulSoup с html5lib parser (это чрезвычайно снисходителен):

from urllib2 import urlopen 
from bs4 import BeautifulSoup 

url = 'http://hobbyking.com/hobbyking/store/__39036__Turnigy_Multistar_2213_980Kv_14Pole_Multi_Rotor_Outrunner.html' 
soup = BeautifulSoup(urlopen(url), 'html5lib') 

for element in soup.find(id='productDetails').find_all(): 
    print element.text 

Печать:

Looking for the ultimate power system for your next Multi-rotor project? Look no further!The Turnigy Multistar outrunners are designed with one thing in mind - maximising Multi-rotor performance! They feature high-end magnets, high quality bearings and all are precision balanced for smooth running, these motors are engineered specifically for multi-rotor use.These include a prop adapter and have a built in aluminium mount for quick and easy installation on your multi-rotor frame. 

outrunner 

... 
+0

Большое спасибо за помощь! Я пойду дальше и попытаюсь использовать другой ответ. Я не понимал, что пустым элементом является режим восстановления по умолчанию. Хотелось бы, чтобы я прочитал немного глубже и знал, что до того, как потратить несколько часов, пытаясь решить это сам! – pri0ritize

+0

@ pri0ritize конечно, спасибо. FYI, я упомянул режим «восстановить», чтобы указать, что 'lxml.html' использует его по умолчанию, и нет простого способа сказать, что это будет более мягким. – alecxe

+0

Я полностью понимаю. Я просто не понял этого в документации. Это огромная помощь, потому что я видел этот пустой элемент совсем немного и не мог понять. – pri0ritize