2016-11-04 52 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