Python BeautifulSoup - 在嵌套<div>&amp;中查找特定的<li> <UL>

时间:2017-10-13 09:21:48

标签: python html web web-scraping beautifulsoup

我尝试从以下HTML中提取“HORROR”:

<div class="synopsis-section">
    <div class="movie-add-info left">
        <ul>
            <li>DIRECTOR : Matthew Vaughn</li>
            <li>ACTORS : </li>
            <li>DURATIONS : 107 Minutes</li>
            <li>CENSOR RATING : 17+</li>
            <li>GENRE : HORROR</li>
            <li>LANGUAGE : BAHASA INDONESIA</li>
       </ul>
     </div>

我试过这种方式:

    >> response = get(url)
    >> html_soup = BeautifulSoup(response.text, 'html.parser')
    >> containers = html_soup.find('div', class_='movie-add-info left')
    >> containers.li

输出: &lt;'li'&gt;主任:Matthew Vaughn&lt;'/ li'&gt;

'HORROR'没有具体的'li'; 任何人都可以帮助我从中获取“HORROR”吗?

3 个答案:

答案 0 :(得分:1)

import re
from bs4 import BeautifulSoup

soup = BeautifulSoup(my_html, 'lxml')

result = soup.find('div', {'class': 'movie-add-info left'}).find('ul').findChildren(text=re.compile(r'GENRE'))

print(result[0])

输出:

GENRE : HORROR

如果您只想要'HORROR',请将其拆分:

print(result[0].split()[2])

答案 1 :(得分:0)

您可以使用css选择器在没有正则表达式帮助的情况下获得所需的输出。

from lxml.html import fromstring

root = fromstring(my_html)
genre = root.cssselect(".movie-add-info li:contains('GENRE')")[0].text
print(genre.split(":")[1].strip()) 

结果:

HORROR

答案 2 :(得分:0)

Pure python

pattern = "<li>GENRE : "

with open("file.html") as file:
    for line in file:
        if pattern in line:
            print(line.replace(pattern, "").replace("</li>", "").strip())
  

输出:

     

恐怖