如何在抓取过程中选择无序列表中的项目?

时间:2016-02-02 16:10:04

标签: python html xpath beautifulsoup web-crawler

我想抓取无序列表中HTML页面的特定元素。有时,这个元素存在,有时它不是。如果元素存在,我想在相应的列表项中选择第二个段落。

示例:

<div class="testdiv">
  <ul class="ullist">
    <li><p>random element 1</p><p>value</p></li>
    <li><p>random element 2</p><p>value</p></li> 
    <li><p>element_to_select</p><p>wanted_value</p></li> 
    <li><p>random element 4</p><p>value</p></li>
  </ul>
</div>

对于上面的HTML,我首先要检查&#39; element_to_select&#39;存在,如果是,则获得wanted_value。

我尝试了以下(相当幼稚)的方法:

soup_parsed = BeautifulSoup(global_html.encode('utf-8'), 'html.parser')
index_of_wanted_element = self.index_containing_substring([str(s) for s in soup_parsed.find_all("p")], "element_to_select")
wanted_element_paragraph = soup_parsed.find_all("p")[index_of_wanted_element+1]
wanted_value_string = str(wanted_element_paragraph).replace("<p>","").replace("</p>","")

其中index_containing_substring在列表中找到所需字符串的索引。

这在Python中是否可行,例如,使用BeautifulSoup,Xpath等?

1 个答案:

答案 0 :(得分:0)

我们的想法是按文字获取element_to_select元素,检查它是否为None,如果没有,则获取下一个p兄弟元素:

element_to_select = soup.find("p", text="element_to_select")
if element_to_select is not None:
    next_element = element_to_select.find_next_sibling("p")
    print(next_element.get_text())