我用BeautifulSoup做了这个,但是有点麻烦,而且我想弄清楚我是否可以直接用Selenium来做。
假设我有以下HTML,它在页面源中重复多次,但元素相同但内容不同:
<div class="person">
<div class="title">
<a href="http://www.url.com/johnsmith/">John Smith</a>
</div>
<div class="company">
<a href="http://www.url.com/company/">SalesForce</a>
</div>
</div>
我需要建立一个字典,每个人的条目如下:
dict = {'name' : 'John Smith', 'company' : 'SalesForce'}
通过执行以下操作,我可以轻松地让Selenium生成每个顶级元素的内容列表:
driver.find_elements_by_class_name('person')
但是我不能遍历列表,因为上面的方法不会将范围/来源缩小到只是该元素的内容。
如果我尝试做这样的事情:
people = driver.find_elements_by_class_name('person')
for person in people:
print person.find_element_by_xpath['//div[@class="title"]//a').text
我一遍又一遍地使用相同的名字。
我需要按组进行分组,因为在我的情况下,遍历整个页面并单独附加每个标记将无效(存在无限滚动,因此效率非常低)。
是否有人知道是否可以直接在Selenium中执行此操作,如果是这样的话?
答案 0 :(得分:20)
使用find_elements_by_class_name()
获取所有广告资源,并find_element_by_xpath()
为每个人获取title
和company
:
persons = []
for person in driver.find_elements_by_class_name('person'):
title = person.find_element_by_xpath('.//div[@class="title"]/a').text
company = person.find_element_by_xpath('.//div[@class="company"]/a').text
persons.append({'title': title, 'company': company})