我有很多离线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,但我找不到一个容易理解的解决方案。
你能帮忙吗?最好的例子:谢谢你的帮助。
答案 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')