Lin*_*ing 5 python beautifulsoup
我在子目录中有这样的html文件 the_files
<div class='log'>start</div>
<div class='ts'>2017-03-14 09:17:52.859 +0800 </div><div class='log'>bla bla bla</div>
<div class='ts'>2017-03-14 09:17:55.619 +0800 </div><div class='log'>aba aba aba</div>
...
...
Run Code Online (Sandbox Code Playgroud)
我想在每个标签中提取字符串并在终端上将其打印出来
2017-03-14 09:17:52.859 +0800 , bla bla bla
2017-03-14 09:17:55.619 +0800 , aba aba aba
...
...
Run Code Online (Sandbox Code Playgroud)
我想忽略第一行<div class='log'>start</div>.
我的代码到目前为止
from bs4 import BeautifulSoup
path = "the_files/"
def do_task_html():
dir_path = os.listdir(path)
for file in dir_path:
if file.endswith(".html"):
soup = BeautifulSoup(open(path+file))
item1 = [element.text for element in soup.find_all("div", "ts")]
string1 = ''.join(item1)
item2 = [element.text for element in soup.find_all("div", "log")]
string2 = ''.join(item2)
print string1 + "," + string2
Run Code Online (Sandbox Code Playgroud)
此代码生成如下结果
2017-03-14 09:17:52.859 +0800 2017-03-14 09:17:55.619 +0800 , start bla bla bla aba aba aba ... ...
Run Code Online (Sandbox Code Playgroud)
有没有办法来解决这个问题?
谢谢您的帮助.
按类获取每个 div 并获取其文本及其next_sibling文本。
for div in soup.find_all("div", class_="ts"):
print ("%s, %s") % (div.get_text(strip=True), div.next_sibling.get_text(strip=True))
Run Code Online (Sandbox Code Playgroud)
输出:
2017-03-14 09:17:52.859 +0800, bla bla bla
2017-03-14 09:17:55.619 +0800, aba aba aba
Run Code Online (Sandbox Code Playgroud)