python BeautifulSoup находит имя идентификатора span без использования метода string \ re - PullRequest
1 голос
/ 21 июля 2011

Я пытаюсь получить имя идентификатора моих тегов span.

<td vAlign="top" colSpan="2"><IMG height="25" src="images/spacer.gif" width="1"><br>
    <!--start table details-->
    <table cellSpacing="1" cellPadding="5" width="100%" bgColor="#a18c42" border="0" id="compDetails">
        <tr bgColor="white">
            <td class="rowName" noWrap>מספר תאגיד:</td>

            <td width="100%" colSpan="3"><span id="lblCompanyNumber">520000472</span></td>
        </tr>
        <tr bgColor="white">
            <td class="rowName" noWrap>שם תאגיד (עברית):</td>
            <td width="50%"><span id="lblCompanyNameHeb">חברת החשמל לישראל בעמ</span></td>
            <td class="rowName" noWrap>שם תאגיד (אנגלית):</td>
            <td width="50%"><span id="lblCompanyNameEn"></span></td>

        </tr>
        <tr bgColor="white">
            <td class="rowName" noWrap>סטטוס:</td>
            <td width="50%"><span id="lblStatus">פעילה</span></td>
            <td class="rowName" noWrap>סוג תאגיד:</td>
            <td width="50%"><span id="lblCorporationType">חברה ציבורית</span></td>
        </tr>

        <tr bgColor="white">
            <td class="rowName" noWrap>סוג חברה ממשלתית:</td>
            <td width="50%"><span id="lblGovCompanyType">חברה  ממשלתית</span></td>
            <td class="rowName" noWrap>סוג מגבלות:</td>
            <td width="50%"><span id="lblLimitType">מוגבלת</span></td>

Допустим, htmlSpan содержит HTML выше -

soup = BeautifulSoup(htmlSpan , fromEncoding="windows-1255") # I want to use windows-1255 and not utf8
spans = soup('span', limit=30)

это вывод -

[<span class="mainTitle">╫¿╫⌐╫¥ ╫פ╫ק╫ס╫¿╫ץ╫¬</span>,
 <span class="subTitle">╫ñ╫¿╫ר╫ש
            ╫ק╫ס╫¿╫פ/╫⌐╫ץ╫¬╫ñ╫ץ╫¬</span>,
 <span id="lblCompanyNumber">514568245</span>,
 <span id="lblCompanyNameHeb">╫£╫ס╫ש╫נ ╫נ╫ש╫á╫ר╫ע╫¿╫ª╫ש╫פ ╫ץ╫á╫ש╫¬╫ץ╫ק ╫₧╫ó╫¿╫¢╫
ץ╫¬ ╫ס╫ó"╫₧</span>,
 <span id="lblCompanyNameEn">LAVI INTEGRATION &SYSTEM; ANALYSIS LTD</span>,
 <span id="lblStatus">╫ñ╫ó╫ש╫£╫פ</span>,
 <span id="lblCorporationType">╫ק╫ס╫¿╫פ ╫ñ╫¿╫ר╫ש╫¬</span>,
 <span id="lblGovCompanyType">╫ק╫ס╫¿╫פ ╫£╫נ ╫₧╫₧╫⌐╫£╫¬╫ש╫¬</span>,
 <span id="lblLimitType">╫₧╫ץ╫ע╫ס╫£╫¬</span>,
 <span id="lblStatusMafera"><b><font color="Red"></font></b></span>,
 <span id="lblMaferaDate"></span>,
 <span id="lblStatusMafera1"><b><font color="Red"></font></b></span>,
 <span id="lblCountry">╫ש╫⌐╫¿╫נ╫£</span>,
 <span id="lblCity">╫ק╫ף╫¿╫פ</span>,
 <span id="lblStreet">╫פ╫£╫£ ╫ש╫ñ╫פ</span>,
 <span id="lblStreetNumber">34</span>,
 <span id="lblZipCode">38424</span>,
 <span id="lblPOB"></span>,
 <span id="lblLocatedAt"></span>,
 <span id="lblCompanyGoal">╫£╫ó╫í╫ץ╫º ╫ס╫¢╫£ ╫ó╫ש╫í╫ץ╫º ╫ק╫ץ╫º╫ש</span>,
 <span id="lblCompanyDesc"></span>,
 <span id="lblDochShana"></span>]

Я знаю, как получить содержимое диапазона, но не могу получить имя идентификатора диапазона ('lblStatus' для бывшего ').

как его получить методами BeautifulSoup?

У меня также возникают проблемы с сохранением содержимого промежутков без преобразования BeautifulSoup (charset) его в utf8 (или тарабарщину), в конце концов мне нужно сохранить имя и содержимое span span в виде csv, и яUTF8 проблемы с ним.

Спасибо

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Я не могу получить имя идентификатора диапазона ('lblStatus' для ex ').

Использование spans как установлено вашим собственным кодом:

for span in spans:
    print span['id']

У меня также возникают проблемы с сохранением содержимого участков без преобразования BeautifulSoup в utf8 или тарабарщины

Я не могу воспроизвести это:вывод spans для меня не тарабарщина, а те же символы, что и в html.Вы уверены, что страница, которую вы пытаетесь проанализировать, закодирована в "windows-1255"?У вас есть правильное объявление кодировки UTF-8 (# -*- coding: UTF-8 -*-) в вашем файле python?

UTF-8 в настоящее время в значительной степени является стандартом в python, и BeautifulSoup использует его для внутреннего использования.Мое предложение было бы работать в UTF-8 во всем вашем коде и изменять кодировку (если вам действительно нужно это делать) только тогда, когда вы выводите / сбрасываете данные.

в конце Iнеобходимо сохранить имя и содержимое идентификатора диапазона в виде csv ...

Это просто грубая идея, которую вы должны настроить в соответствии с вашими потребностями:

import csv
file_ = open('output.csv', 'w')
writer = csv.writer(file_)
for span in spans:
    writer.writerow([span['id'], span.string])

... и у меня проблемы с utf8.

Не могли бы вы указать, в чем ваши проблемы?На моей системе (GNU / Linux) он работает просто отлично.

1 голос
/ 21 июля 2011

Вы можете получить доступ к атрибутам тегов , посмотрев на тег как надиктованный, по имени тега:

for span in spans:
    print span['id']

дает то, что вы хотите: lblCompanyNumber lblCompanyNameHeb lblCompanyNameEn lblStatus lblCorporationType lblGovCompanyType lblLimitType...

У меня также возникают проблемы с сохранением содержимого spans в csv без преобразования BeautifulSoup (charset) в utf8 (или бред)

ответ Mac на использование decode () правильный. Это не связано с sys.getdefaultencoding(), который по умолчанию имеет значение «ascii», это не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...