[英]I need to extract some data using python from a html page
這是html頁面的一部分,我需要從中提取以下各項:強烈標記的名稱,分類類型(演員和歌手),生死地點。
<li class="clearfix">
<div style="margin-top:10px;">
<div class="float-left" style="margin-bottom:10px;">
<a href="http://" title="Elvis Presley" name="Elvis Presley" class="float-left">
<strong>Mr. Elvis Presley</strong></a>
</div>
<div class="rating_overall fleft" style="margin:0px 0px 0px 10px;">
<div class="rating_overall voted_rating_overall" style='width:72.96px;'></div>
</div>
<span class="result-vote float-left" id="result" style="line-height:15px; color: #AAA; font-size: 0.9em; margin-top: 1px;"> (15 vots)</span>
<div class="clear"></div>
<a href="http://" title="Mr. Elvis Presley" name="Mr. Elvis Presley">
<img style="float:left;" src="http://a.jpg" alt="Mr. Elvis Presley" title="Mr. Elvis Presley" />
</a>
<br/>
<p>
<b>Classification:</b>
<a href="http://" title="Actor " name="Actor " class="underline">Actor </a>
, <a href="" title="Singer" name="Singer" class="underline">Singer</a>
<br />
<b>Born:</b> <a href="http://" title="Tupelo" name="Tupelo" class="underline">Tupelo</a><br />
<b>Died:</b>
Memphis,
<!--<b>City:</b>-->
<a href="http://" title="Memphis" name="Memphis" class="underline">Memphis</a>
</p>
<div class="clk"></div>
</div>
</li>
我曾嘗試使用BeautifulSoup,但我是python的新手:
data2 = soup.find_all('li',{'class':'clearfix'})
for container in data2:
if container.find('a', {'class':'float-left'}):
name = container.a.text
print (name)
if container.find('a', {'class':'underline'}):
classification=container.div.p.a.text
print (classification)
flag
盡管我沒有從腳本中得到任何錯誤,但是我設法僅提取名稱和第一個分類。 如何確定我需要的其余要素:分類(“歌手”)以及出生和死亡的地點?
您可以將漂亮的湯用於html解析器,我首先向您展示漂亮的湯,再向您展示正則表達式,然后通過組捕獲來捕獲結果:
首先搭配美麗的湯:
string_1="""<li class="clearfix">
<div style="margin-top:10px;">
<div class="float-left" style="margin-bottom:10px;">
<a href="http://" title="Elvis Presley" name="Elvis Presley" class="float-left">
<strong>Mr. Elvis Presley</strong></a>
</div>
<div class="rating_overall fleft" style="margin:0px 0px 0px 10px;">
<div class="rating_overall voted_rating_overall" style='width:72.96px;'></div>
</div>
<span class="result-vote float-left" id="result" style="line-height:15px; color: #AAA; font-size: 0.9em; margin-top: 1px;"> (15 vots)</span>
<div class="clear"></div>
<a href="http://" title="Mr. Elvis Presley" name="Mr. Elvis Presley">
<img style="float:left;" src="http://a.jpg" alt="Mr. Elvis Presley" title="Mr. Elvis Presley" />
</a>
<br/>
<p>
<b>Classification:</b>
<a href="http://" title="Actor " name="Actor " class="underline">Actor </a>
, <a href="" title="Singer" name="Singer" class="underline">Singer</a>
<br />
<b>Born:</b> <a href="http://" title="Tupelo" name="Tupelo" class="underline">Tupelo</a><br />
<b>Died:</b>
Memphis,
<!--<b>City:</b>-->
<a href="http://" title="Memphis" name="Memphis" class="underline">Memphis</a>
</p>
<div class="clk"></div>
</div>
</li>"""
from bs4 import BeautifulSoup
soup=BeautifulSoup(string_1,"html.parser")
for a in soup.find_all('a'):
print(a['name'])
輸出:
Elvis Presley
Mr. Elvis Presley
Actor
Singer
Tupelo
Memphis
用正則表達式第二:
如果表單代碼與您在此處顯示的相同,請使用它:
import re
string_1="""<li class="clearfix">
<div style="margin-top:10px;">
<div class="float-left" style="margin-bottom:10px;">
<a href="http://" title="Elvis Presley" name="Elvis Presley" class="float-left">
<strong>Mr. Elvis Presley</strong></a>
</div>
<div class="rating_overall fleft" style="margin:0px 0px 0px 10px;">
<div class="rating_overall voted_rating_overall" style='width:72.96px;'></div>
</div>
<span class="result-vote float-left" id="result" style="line-height:15px; color: #AAA; font-size: 0.9em; margin-top: 1px;"> (15 vots)</span>
<div class="clear"></div>
<a href="http://" title="Mr. Elvis Presley" name="Mr. Elvis Presley">
<img style="float:left;" src="http://a.jpg" alt="Mr. Elvis Presley" title="Mr. Elvis Presley" />
</a>
<br/>
<p>
<b>Classification:</b>
<a href="http://" title="Actor " name="Actor " class="underline">Actor </a>
, <a href="" title="Singer" name="Singer" class="underline">Singer</a>
<br />
<b>Born:</b> <a href="http://" title="Tupelo" name="Tupelo" class="underline">Tupelo</a><br />
<b>Died:</b>
Memphis,
<!--<b>City:</b>-->
<a href="http://" title="Memphis" name="Memphis" class="underline">Memphis</a>
</p>
<div class="clk"></div>
</div>
</li>"""
pattern=r'<strong>(\w.+)<\/strong>|<b>Classification:<\/b>(\s.+)(\s.+)|(Born:.+)|(Died:.+\s.+\s.+\s.+)'
pattern_2=r'name=["](\w.+?)["]'
match=re.finditer(pattern,string_1,re.M)
for find in match:
if find.group(1):
print("Name {}".format(find.group(1)))
if find.group(2):
print("Classificiation first {}".format(re.search(pattern_2,str(find.group(2))).group(1)))
print("Classification second {}".format(re.search(pattern_2,str(find.group(3))).group(1)))
if find.group(4):
print("Born {}".format(re.search(pattern_2, str(find.group(4))).group(1)))
if find.group(5):
print("Dead {}".format(re.search(pattern_2, str(find.group(5))).group(1)))
輸出:
Name Mr. Elvis Presley
Classificiation first Actor
Classification second Singer
Born Tupelo
Dead Memphis
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.