3 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
對于 html 元素選擇Beautiful Soup是您所需要的,@QHarr答案應(yīng)該有效只需檢查您使用的編碼。
但是,如果您想要正則表達式解決方案,只需使您的字符串變平(沒有換行符)而不是搜索元素:
import re
html = """<div class="full">
<div>
<div> **<== WANT TO START GRABBING HERE **
<div>CONTENT</div>
<div>CONTENT</div>
<div>CONTENT</div>
<div>CONTENT</div>
</div> **<== STOP GRABBING HERE **
</div>
</div>"""
sep = 'xxxx****' # dummy string to replace \n and put them back
r = '<div class="full">[\s{0}]*<div>(.*)</div>[\s{0}]*</div>'.format(sep)
# search will return first matching element.
l = re.search(r, html.replace('\n',sep)).groups(0)[0]
# findall will return all element matching the pattern if you have more than one use findall
# l = re.findall(r, html.replace('\n',sep))[0]
print(l.replace(sep, '\n'))

TA貢獻1863條經(jīng)驗 獲得超2個贊
對于您的特定情況,請嘗試以下正則表達式:
(<div>\s+){2}([\s\w</>]*?)(</div>\s+){2}
然后從中提取所需的組。
但是,我建議改用BeautifulSoup,它更簡單、更強大。

TA貢獻1963條經(jīng)驗 獲得超6個贊
您可以結(jié)合使用類和類型css 選擇器以及子組合器來完成此操作
from bs4 import BeautifulSoup as bs
html = '''<div class="full">
<div>
<div>
<div>CONTENT</div>
<div>CONTENT</div>
<div>CONTENT</div>
<div>CONTENT</div>
</div>
</div>
</div>'''
soup = bs(html, 'lxml')
print(soup.select_one('.full > div > div'))
添加回答
舉報