2016-04-22 6 views
0

У меня есть некоторый код, который будет извлекать пары данных из HTML-файла с помощью BS4:Как извлечь определенные данные из файлов HTML?

from bs4 import BeautifulSoup 
readfile = """ 
<html> 
    <head> 
    <meta name="generator" 
    <title></title> 
    </head> 
    <body> 

    <table align="center" border="1" cellpadding="0" cellspacing="1" width="650"> 
    <tr> 
    <td> 
    <font size="1"> Title1</font> 
    <br /> </td> 
    <td> 
    <font size="1"> TItle2 type</font> 
    <br /> </td> 
    <td> 
    <font size="1"> Title3</font> 
    <br />  
    <font size="2">value1</font></td> 
    <td> 
    <font size="1"> Title4 ID</font> 
    <br />  
    <font size="2">value2</font></td> 
    </tr> 
""" 

soup = BeautifulSoup(readfile, "html.parser") 
tables = soup.findChildren('table') 

for title in soup.find_all("font", {"size": "1"}): 
    value = title.find_next_sibling("font", {"size": "2"}) 
    print (title.text, ":", value.text if value else "No Value") 

Давайте предположим, что у меня есть 30 строк в общей сложности. Мне нужно только 4 пары значений, поэтому я могу вставить их в rdbms.

Должен ли я попытаться использовать список размеров: 1 значения Я хочу получить размер: 2 значение? Посмотрите несколько примеров на BS4 и он не погружается. Спасибо

+0

Каков ваш желаемый результат? – alecxe

ответ

0

Если вы хотите получить первые четыре пары в РСУБД, тогда необходимо указать значение переменной и условие, как показано ниже.

from bs4 import BeautifulSoup 
readfile = open("html.parser",'r') 
soup = BeautifulSoup(readfile) 

tables = soup.findChildren('table') 

count = 0 
for i in soup.find_all("font", {"size": "1"}): 
    value = i.find_next_sibling("font", {"size": "2"}) 
    if value is not None and count < 4: 
     print (i.text, ":", value.text if value else "No Value") 
     count = count + 1 

Надеюсь, это поможет.

+0

Если бы я хотел 1-го 4, это был бы ответ. И я должен был быть более конкретным. Это моя вина. Как выбрать конкретные значения из списка из 30 значений. Они будут одинаковыми для каждого файла. Еще раз спасибо! – Dave

+0

Можете ли вы быть более конкретным. Можете ли вы вставить точный html, который вы пытаетесь проанализировать, и что от него потребуется. Причина в том, что каждый из тегов в html будет отличаться от другого тега каким-то уникальным идентификатором или атрибутом. Поэтому мне было бы легко обрабатывать, если вы вставляете точный html, с которым вы пытаетесь разобрать. –

+0

@Akayla: к сожалению, код является собственностью, поэтому я не могу его разделить. Я могу сказать следующее: HTML - одна большая таблица. Поэтому они использовали TD для создания таблицы, TR для создания строк. Они не использовали TC для обозначения ячеек. Поэтому я должен использовать шрифт: размер, чтобы найти материал. Спасибо, что помогли мне! – Dave

Смежные вопросы