在抓取和解析后存储数据

时间:2015-10-12 21:48:40

标签: python python-3.x web-scraping beautifulsoup bs4

我有一个html文件,我使用Beautiful Soup 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,但无法以所需格式存储数据(数字和移动设备有两个单独的列表)

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

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

答案 1 :(得分:0)

这就是我解决它的方式

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标记以查找“名称:”或“移动:”并将下一个标记(包含值)添加到单独的列表中