我正在尝试从网站收集文字和图片,以帮助收集与失踪人员相关的推文。这是问题所在:
有些推文没有图片,因此相应的<div class='c' ....>
只有一个<div>...</div>
。
有些推文有图片,因此相应的<div class='c' ....>
有两个<div>...</div>
,如下面的代码所示:
<div class='c' id="M_D*****">
<div>...</div>
和
<div class='c' id="M_D*****">
<div>...</div>
<div>...</div>
我打算检查推文是否有图片,即查明相应的<div class='c' ....>
是否有两个<div>...</div>
。
PS:以下代码用于收集所有文本和图片网址,但并非所有推文都有图片,所以我想通过解决上述问题来匹配它们。
tweets = browser.find_elements_by_xpath("//span[@class='ctt']")
graph_links = browser.find_elements_by_xpath("//img[@alt='img' and @class='ib']")
这是一项公益计划,旨在帮助失踪人士回家。
答案 0 :(得分:0)
你提供的html可能还不够,但基于它我建议xpath://div[@id='M_D*****' and ./div//img]
找到具有指定id的div并包含带有image的div。
但直接回答你的问题:
//div[./div[2] and not(./div[3])]
会找到所有正好有2个div孩子的div
答案 1 :(得分:0)
通过分别收集文本和图像,我认为事后不可能将文本与相关图像相匹配。我建议采用不同的方法。我会搜索包含文本和可选图像的<div class='c'...>
。一旦你有了#34;容器&#34; DIV,然后您可以获取文本并查看图像是否存在并将它们放在一起。如果没有所有相关的HTML,您可能需要调整下面的代码,但它应该让您了解如何处理此问题。
containers = browser.find_elements_by_css_selector("div.c")
for container in containers:
print container.find_element_by_css_selector("span.ctt").text // the tweet text
images = container.find_elements_by_css_selector("img.ib")
if len(images) > 0 // see if the image exists
print images[0].get_attribute("src") // the URL of the image
print "-------------" // separator between tweets