[英]selenium, xpath: How to select a node within node?
我有一個結構如下的網頁:
<div class="l_post j_l_post l_post_bright "...>
...
<div class="j_lzl_c_b_a core_reply_content">
<li class="lzl_single_post j_lzl_s_p first_no_border" ...>
<div class="lzl_cnt">
content
</div>
</li>
<li class="lzl_single_post j_lzl_s_p first_no_border" ...>
...
</li>
</div>
</div>
<div class="l_post j_l_post l_post_bright "...>
...(contain content, same as above)
</div>
...
目前,我可以像這樣一步選擇所有內容:
for i in driver.find_elements_by_xpath('//*[@class="lzl_cnt"]'):
print(i.text)
但正如您所看到的,該網頁由包含我所需內容的重復塊組成, 因此,我想分別獲取這些內容以及這些重復塊之間存在差異的其他信息( <div class="l_post j_l_post l_post_bright "...>...</div>
),此外,我希望將<li class ="lzl_single_post"...>
那些內容分開,以便我以后更輕松地處理這些內容 。 我嘗試了這個:
items = []
# get each blocks
for sel in driver.find_elements_by_xpath('//div[@class="l_post j_l_post l_post_bright "]'):
name = sel.find_element_by_css_selector('.d_name').text
try: content = sel.find_element_by_css_selector('.j_d_post_content').text
except: content = '',
try:
reply = []
# get each post within specific block
for i in sel.find_elements_by_xpath('//*[@class="lzl_cnt"]'):
reply.append(i.text)
except: reply = []
items.append({'name': name, 'content': content, 'reply': reply})
但是結果表明, 每次外部for循環運行時,我都會在網頁上獲得所有答復,而不是我想要的每個單獨塊的答復集
有什么建議么?
只需添加即可.
(上下文指針)作為
sel.find_elements_by_xpath('.//*[@class="lzl_cnt"]')
請注意, //*[@class="lzl_cnt"]
表示DOM中所有具有"lzl_cnt"
類名的 節點,而.//*[@class="lzl_cnt"]
表示所有sel
屬於"lzl_cnt"
類的后代的節點名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.