2017-02-08 10 views
2

私はPythonを初めて使い、プロジェクト用のWebスクレイピング用の美しいスープを使用しています。Python/Beautiful soup/pandasを使用してテーブルから選択したテキストのみをスクラップします

私は、リスト/ディクショナリ内のテキストの一部だけを取得したいと考えています。私は、次のコードで始まっ:

url = "http://eng.mizon.co.kr/productlist.asp" 
response = requests.get(url) 
soup = BeautifulSoup(response.text, 'html.parser') 
tables = soup.find_all('table') 

これは私がテーブルからテーブルにデータを解析し、項目のONE助け以下のように見えた:

<table border="0" cellpadding="0" cellspacing="0" width="235"> 
<tr> 
<td align="center" height="238"><a href="javascript:fnMoveDetail(7499)" onfocus="this.blur()"><img alt="LL IN ONE SNAIL REPAIR CREAM, SNAIL REPAIR BLEMISH BALM, WATERMAX MOISTURE B.B CREAM, WATERMAX AQUA GEL CREAM, CORRECT COMBO CREAM, GOLD STARFISH ALL IN ONE CREAM, S-VENOM WRINKLE TOX CREAM, BLACK SNAIL ALL IN ONE CREAM, APPLE SMOOTHIE PEELING GEL, REAL SOYBEAN DEEP CLEANSING OIL, COLLAGEN POWER LIFTING CREAM, SNAIL RECOVERY GEL CREAM" border="0" src="http://www.mizon.co.kr/images/upload/product/20150428113514_3.jpg" width="240"/></a></td> 
</tr> 
<tr> 
<td align="center" height="43" valign="middle"><a href="javascript:fnMoveDetail(7499)" onfocus="this.blur()"><span class="style3">ENJOY VITAL-UP TIME Lift Up Mask <br/> 
         Volume:25ml</span></a></td> 
</tr> 
</table> 

ような各項目についての表に、私は希望します上記の表の最後のデータセルから次だけ抽出する:

1)HREF = JavaScriptで4桁の番号:fnMoveDetail(7499)

クラス下2)名:S tyle3

3)クラスの下のボリューム:style3

次のように私のコードの次の行は次の通りであった:

df = pd.read_html(str(tables), skiprows={0}, flavor="bs4")[0] 
a_links = soup.find_all('a', attrs={'class':'style3'}) 
stnid_dict = {} 
for a_link in a_links: 
    cid = ((a_link['href'].split("javascript:fnMoveDetail("))[1].split(")")[0]) 
    stnid_dict[a_link.text] = cid 

私の目標は、個々のリンクに移動して情報を一致させるために数字を使用することですこのページを各リンクにスクレイプします。 これに最も効果的なアプローチは何ですか?

答えて

1

aタグを使用してください。アンカーとしてjavascript hrefが含まれており、すべてspanを見つけてparentというタグを取得してください。アウト

url = "http://eng.mizon.co.kr/productlist.asp" 
response = requests.get(url) 
soup = BeautifulSoup(response.text, 'html.parser') 
spans = soup.select('td > a[href*="javascript:fnMoveDetail"] > span') 
for span in spans: 
    href = span.find_parent('a').get('href').strip('javascript:fnMoveDetail()') 
    name, volume = span.get_text(strip=True).split('Volume:') 
    print(name, volume, href) 

Dust Clean up Peeling Toner 150ml 8235 
Collagen Power Lifting EX Toner 150ml 8067 
Collagen Power Lifting EX Emulsion 150ml 8068 
Barrier Oil Toner 150ml 8059 
Barrier Oil Emulsion 150ml 8060 
BLACK CLEAN UP PORE WATER FINISHER 150ml 7650 
Vita Lemon Sparkling Toner 150ml 7356 
INTENSIVE SKIN BARRIER TONER 150ml 7110 
INTENSIVE SKIN BARRIER EMULSION 150ml 7111 
+1

ありがとうございました! – PhiloY

関連する問題