抓取和解析后存储数据

2024-04-24 23:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个html文件,我已经用漂亮的汤4解析,这是我感兴趣的部分

[
 <td>Name :</td>,   <td>xyz</td>, 
 <td>Mobile :</td>, <td>180-14587962</td>, 
 <td>Company:</td>, <td>abc Comp</td>, 
 <td>Name :</td>,   <td>  </td>, 
 <td>Mobile :</td>, <td>  </td>, 
 <td>Company:</td>, <td>  </td>, 
 <td>Name :</td>,   <td>  </td>, 
 <td>Mobile :</td>, <td>  </td> 
]

我只需要分别提取Name和Mobile(它们在解析树中处于同一级别)。我该怎么办?我已经尝试过使用soup.find_next_siblings method,但是无法以所需的格式存储数据(数字和移动电话的两个单独列表)


Tags: 文件namehtmlfindmobile级别company感兴趣
2条回答

您可以使用以下方法:

from bs4 import BeautifulSoup
html = """
 <td>Name :</td>,   <td>xyz</td>, 
 <td>Mobile :</td>, <td>180-14587962</td>, 
 <td>Company:</td>, <td>abc Comp</td>, 
 <td>Name :</td>,   <td>  </td>, 
 <td>Mobile :</td>, <td>  </td>, 
 <td>Company:</td>, <td>  </td>, 
 <td>Name :</td>,   <td>  </td>, 
 <td>Mobile :</td>, <td>  </td> 
"""
soup = BeautifulSoup(html, "lxml")
x = soup.find_all("td")
print x[1]
print x[3]

标准输出

<td>xyz</td>
<td>180-14587962</td>

演示

http://ideone.com/xDzeni

我就是这样解决的

for tag in soup.findAll('td'):
  if tag.text.strip("\n").strip(' ').strip("\n")== 'Name :':
      inter=tag.find_next_sibling()
      list_name.append(inter.text.strip("\n").strip(' ').strip("\n"))
  if tag.text.strip("\n").strip(' ').strip("\n")== 'Mobile :':
      inter=tag.find_next_sibling()
      list_mobile.append(inter.text.strip("\n").strip(' ').strip("\n"))

循环遍历所有td标记以查找“Name:”或“Mobile:”,并将下一个标记(包含值)添加到单独的列表中

相关问题 更多 >