2016-11-04 65 views
-3

我真的有很多離線html文件,我需要從他們的姓名,地址等獲得並創建CSV。HTML離線文件獲取內容

我第一次嘗試做巫婆批次 - 例如:

for /r %%i in (*) DO (
    findstr /o "name" %%i >> results.txt 
    ECHO ; >> results.txt 

    findstr /o "STREET" %%i >> results.txt 
    ECHO ; >> results.txt 

    etc 

ECHO xxxendlinexxx >> results.txt          
) 

它的工作原理,但給我的長文件有什麼需要用正規表示努力工作......我想一定有更好的辦法如何閱讀HTML中的TAG內容。

我發現Python的HTML解析器:

from html.parser import HTMLParser 

但我不知道熱,以用於脫機文件和特定的標籤(ID = 「東西」)。我使用Google,在YouTube上觀看內容,但我找不到容易理解的解決方案。

你能幫忙嗎?最好的例子:

  1. 如何打開文件
  2. 如何查找特定標籤內容
  3. 內容保存到另一個文件

謝謝你的幫助。

+2

如果你不提供一個範例HTML文件所需的數據和你希望你的csv看起來像什麼的例子,你如何期望我們創建一個合理的解決方案? – Compo

回答

-1

您可以使用模塊xml而不是html.parser來使用xml或html。這很容易。

我用模塊xml.etree但也有其他(DOC:xml

您可以從文件(ET.parse(filename))讀取,但例如,在我使用的字符串。

您必須學習如何使用xpath(即'.//div[@id="something"]')來查找元素。

import xml.etree.ElementTree as ET 

html_string = '''<html> 
<body> 
<div id="something">Hello</div> 
<div id="something">World</div> 
</body> 
</html>''' 

#tree = ET.parse(filename) 
tree = ET.fromstring(html_string) 

divs = tree.findall('.//div[@id="something"]') 

# --- screen --- 

for d in divs: 
    print(d.text) 

# --- file --- 

with open('output.txt') as f: 
    for d in divs: 
     f.write(d.text + '\n') 
0

如果你想使用html.parser,舉一個例子,你想創建一個解析誰得到所有主標題(H1):

from html.parser import HTMLParser 

class MyHTMLParser(HTMLParser): 
    my_titles = [] 
    target_id = ['article-1-b', 'article-2-a'] 
    COPY_DATA = False 

    def handle_starttag(self, tag, attrs): 
     if tag == 'h1': 
      if 'id' in attrs and attrs['id'] in target_id: 
       self.COPY_DATA = True 

    def handle_data(self, data): 
     if self.COPY_DATA: 
      self.my_titles.append(data) 
      self.COPY_DATA = False 


parser = MyHTMLParser() 
with open('my_file.html') as f: 
    parser.feed(f.read()) 

print(parser.my_titles) 
+0

謝謝,這個幫助。 但我有一個litte更多的問題 - 我可以添加更多的標籤 - 像H2等,但在某些情況下,我必須使用「id」或「類」等找到正確的標記,我發現了一些代碼stacoverflow - 它的工作原理,芽無法將它們組合在一起。你明白了嗎?有http://stackoverflow.com/questions/3276040/how-can-i-use-the-python-htmlparser-library-to-extract-data-from-a-specific-div – Firejs

+0

我不確定要理解但我編輯了代碼。看看並告訴我。 – Anton