HTML脱机文件获取内容

时间:2016-11-04 14:50:34

标签: python html batch-file html-parsing

我有很多离线html文件,我需要从他们的名字,地址等获取并创建CSV。

我首先尝试批处理 - 例如:

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

但我不知道热门用于离线文件和特定TAG(id ="某事")。我在谷歌上搜索,看看youtube,但我找不到一个容易理解的解决方案。

你能帮忙吗?最好的例子:

  1. 如何打开文件
  2. 如何查找特定标记中的内容
  3. 将内容保存到其他文件
  4. 谢谢你的帮助。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:-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')