2016-11-22 14 views
1

私はstackoverflowを徹底的に検索しましたが、適切な解決策を見つけることができませんでした。私は従来のWebサイトを削っているので、すべてのラベルと入力名を抽出したい。古いWebページのHTMLフォーマットは、私がラベル(テキストを必要とするように私は、findAllの方法を試してみましたが、失敗した複数のHTMLタグを持つWebページをスクラップできません

First Name, firstname 
Last Name, lastname 
Gender, gender 
User Name, username 
User Account, useraccount 

としてbeautifulsoupでのpythonを使用して出力を抽出したいこの

<div class="labellong">First Name</div> 
<INPUT class="input-l" name="firstname"> 

<div class="labellong">Last Name</div> 
<INPUT class="input-l" name="lastname"> 

<div class="labellong">Gender</div> 
<input type="radio" name="gender" value="male"> Male<br> 
<input type="radio" name="gender" value="female"> Female<br> 

<table> 
    <tr valign="top"> 
     <td width="174">User Name</td> 
     <td width="888"><input name="username" value="" id="username" class="input-m" /></td> 
    </tr> 
    <tr> 
     <td width="174">User Account</td> 
     <td width="888"><input name="useraccount" value="" id="uaseraccount" class="input-m" /></td> 
    </tr> 
</table> 

のようなものです)と入力タグ名を一緒に、ラベルテキストで複数のhtmlタグでスクラップするソリューションはありますか?おかげ

は、私は、Webページに新しいこすると、ここで私が見つけ、私がしようとするだろうソリューションは兄弟https://www.crummy.com/software/BeautifulSoup/bs4/doc/#next-sibling-and-previous-sibling

を選択することがあるので、最初に各ラベルと、その後のラベルを見つける

from bs4 import BeautifulSoup 
import urllib.request as urllib2 

f = open("g:\output.txt", "w") 
errFile = open("g:\error.txt", "w") 

url = "file:///g://pharmacy.htm" 
file = urllib2.urlopen(url) 
soup = BeautifulSoup(file) 


for message1 in soup.findAll(["div", {"class": "labellong"}, "input", {"class": "input-l"}, "td"]): 
    outText = message1.get_text() 
    f.write(outText + '\n') 


f.close() 
errFile.close() 
+0

私は試したコードで投稿を更新しました。希望の出力を得るためにnext_elementまたはnext_siblingsを使用する必要がありますか? – AnuNag

答えて

-1

を試したコードでいます兄弟

編集

from bs4 import BeautifulSoup 

soup = BeautifulSoup(open("/Projects/python/webscraping/web.html"),"html5lib") 

for div in soup.findAll(["div", {"class": "labellong"}]): 
    labelName = div.get_text() 
    for sibling in div.next_siblings: 
     if (sibling.name == "input"): 
      inputName = sibling['name'] 
      break 
    print labelName, inputName 

for row in soup.findAll(["tr"]): 
    labelName = None 
    inputName = None 
    for td in row: 
     if (td.name == 'td'): 
      if (not labelName): # labelName not yet set 
       labelName = td.get_text() 
      else: # second td so inputName 
       inputName = td.contents[0]['name'] 
       print labelName, inputName 
+0

ありがとう、私はnext_siblingsで試してみたが、私の場合は動作していないようだ、next_elementを使ってすべてのタグを解析しようとする – AnuNag

+0

@AnuNagあなたは解決策を見つけることができましたか?私は兄弟をどのように使うことができるか、私の答えを編集しました –

関連する問題