使用Beautiful Soup

时间:2017-07-26 08:54:39

标签: python html web-scraping beautifulsoup

我正在使用Python和Beautiful Soup开展Web scraper项目。请查看我遇到问题的HTML代码部分。由于<li>中的所有<ul>项都与<div><span>具有相同的类名,因此如何提取电话号码,即第二个<span>的值在第三个<li>项目?

我可以使用<ul>提取ad_soup.find("ul",{"class":"Menu"})标记及其内容,但我不知道如何继续。任何帮助都将受到高度赞赏。

<ul class="Menu">
  <li>
    <div class="item">
      <span class="name">Name:</span>
      <span class="value">....</span>
    </div>
  </li>
  <li>
    <div class="item">
      <span class="name">Location:</span>
      <span class="value">....</span>
    </div>
  </li>
  <li>
    <div class="item">
      <span class="name">Phone:</span>
      <span class="value">....</span>
    </div>
  </li>
</ul>

2 个答案:

答案 0 :(得分:2)

如果您知道手机始终是第三个元素,则以下内容应该有所帮助:

(ad_soup.find("ul",{"class":"Menu"}).
         find_all("li")[2].find("span", {"class": "value"}))

如果您不知道手机始终是第三个元素,您可以遍历所有li并选择所需的手机:

[li.find("span", {"class": "value"}) 
 for li in ad_soup.find("ul",{"class": "Menu"}).find_all("li")
 if li.find("span", {"class": "name"}).string == "Phone:"]

答案 1 :(得分:2)

您可以提取所有li并在结果数组中查找范围,如下所示:

let timeIndex = 2
let DateLocation = 1
let locationIndex = 4
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {



    if userPickedDate && indexPath.row == timeIndex {
        return 50
    }
    if userPickedDate && indexPath.row == DateLocation {

        return 0

    }
    print("The indexPath: \(indexPath)")
    if remindMeOnLocationSwitch.isOn && indexPath.row == locationIndex {
        return 100

    }
    if remindMeOnDay.isOn && indexPath.row == DateLocation{
        return 300
    } else if indexPath.row == DateLocation || indexPath.row == timeIndex || indexPath.row == locationIndex  {
        return 0
    }
    return 50

}