簡體   English   中英

如何提取兩個字符之間的興趣值?

[英]How to extract values of interests between two characters?

我正在使用以下HTML代碼在網絡上抓取網頁:

Predecessors &middot; <i class="fa fa-sign-in"></i> / Successors &middot; <i class="fa fa-sign-out"></i>
</dt>

<dd>
    1931 &middot;
    <a class="active" href="../../../aus/party/1253">
                ALP </a> &middot;
    <i class="fa fa-sign-in"> </i> splinter

</dd>

<dd>
    1931 &middot;
    <a class="active" href="../../../aus/party/1905">
                NAT </a> &middot;
    <i class="fa fa-sign-in"> </i> successor

</dd>

我用於獲取以上輸出的代碼如下:

import urllib.request

url_pc = str('http://www.parlgov.org/explore/aus/party/1912/")
fp = urllib.request.urlopen(url_pc)
mybytes = fp.read()

mystr = mybytes.decode("utf8")
fp.close()
#print(mystr)

str1 = mystr[mystr.find('Predecessors'):]

str2 = str1.split("</div>", 1)[0]

str3 = str2.split("<dt> Party (name) changes</dt>", 1)[0]

print(str3)

我想提取每個組中<dd></dd>之間的所有內容,並使其成為字符串,然后將其添加到一行數據中。 有沒有可以運行的循環或可以使用的代碼,可以提取兩組中<dd></dd>之間的所有字符串?

您可以使用BeautifuSoup查找所有<dd> ,然后獲取每個<dd>作為列表。 然后,您可以將list的元素連接到一個字符串。 一些元素可以是需要轉換為字符串的對象。 您也可以使用strip()刪除一些空格,但可能仍需要如此清潔。

text = '''Predecessors &middot; <i class="fa fa-sign-in"></i>
            / Successors &middot; <i class="fa fa-sign-out"></i>
          </dt>

            <dd>
              1931 &middot;
              <a class="active"
                 href="../../../aus/party/1253">
                ALP </a>

              &middot;
               <i class="fa fa-sign-in"> </i> 

               splinter 



            </dd>

            <dd>
              1931 &middot;
              <a class="active"
                 href="../../../aus/party/1905">
                NAT </a>

              &middot;
               <i class="fa fa-sign-in"> </i> 

               successor 



            </dd>'''

from bs4 import BeautifulSoup as BS

soup = BS(text, 'html.parser')

for item in soup.find_all('dd'):
    print(''.join(str(x).strip() for x in item.contents))

結果

1931 ·<a class="active" href="../../../aus/party/1253">
                ALP </a>·<i class="fa fa-sign-in"> </i>splinter
1931 ·<a class="active" href="../../../aus/party/1905">
                NAT </a>·<i class="fa fa-sign-in"> </i>successor

編輯:

from bs4 import BeautifulSoup as BS

soup = BS(text, 'html.parser')

all_rows = []

for item in soup.find_all('dd'):
    #print(''.join(str(x).strip() for x in item.contents))
    row = (item.contents[0].strip()[:-2], item.find('a').get_text().strip(), item.contents[4].strip(), item.find('a').get('href')[-4:])
    row = ', '.join(row)
    print(row)
    all_rows.append(row)

text = ' | '.join(all_rows)
print(text)

結果:

1931, ALP, splinter, 1253
1931, NAT, successor, 1905
1931, ALP, splinter, 1253 | 1931, NAT, successor, 1905

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM