首页 文章

python BeautifulSoup在不使用string \ re方法的情况下查找span id名称

提问于
浏览
1

我正在尝试获取span标签的id名称 .

<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>]

我知道如何获取span内容但我无法获得span id名称('lblStatus'代表ex') .

我如何使用BeautifulSoup的方法获得它?

我也无法保存 Span 内容而没有BeautifulSoup转换(charset)它到utf8(或乱码)我最终需要将span id名称和内容保存到csv中,并且我遇到了utf8问题 .

谢谢

2 回答

  • 1

    我无法获得span id名称('lblStatus'代表ex') .

    使用您自己的代码设置的 spans

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

    我也无法在没有BeautifulSoup转换为utf8或乱码的情况下保存 Span 内容

    我无法复制这个:对我来说 spans 的输出不是乱码,而是和html中的字符相同 . 您确定要解析的页面是否在"windows-1255"中编码?您的python文件是否有正确的UTF-8编码声明( # -*- coding: UTF-8 -*- )?

    UTF-8现在几乎是python的标准,BeautifulSoup在内部使用它 . 我的建议是在你的所有代码中使用UTF-8,只有在输出/转储数据时才改变编码(如果你真的需要这样做) .

    最后我需要将span id名称和内容保存到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

    你可以通过将标签查找为dict来标记access the attributes of tags,用标签名称键入:

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

    给出你想要的东西: lblCompanyNumber lblCompanyNameHeb lblCompanyNameEn lblStatus lblCorporationType lblGovCompanyType lblLimitType...

    我也无法将 Span 内容保存到没有BeautifulSoup转换(charset)到utf8(或乱码)的csv中

    mac 's answer to use decode() is correct. It'与 sys.getdefaultencoding() 无关,默认为'ascii',这无关紧要 .

相关问题