如何结合WebDriver find_elements_by *调用,同时跟踪结果的顺序?

时间:2015-10-22 04:13:27

标签: python python-2.7 selenium selenium-webdriver webdriver

在典型的Google本地搜索结果页面上,例如this,其中包含20个结果:

enter image description here

评论以“无评论”的形式给出,可以使用以下方式提取:

driver.find_elements_by_class_name("_Juh")

或:

非零数量的评论,可以使用以下方式提取:

driver.find_elements_by_css_selector("div:nth-child(1) > div:nth-child(1) > span:nth-child(2) > div:nth-child(1) > span:nth-child(1)")

或:

只是括号中的数字,例如(7),可以使用以下方法提取:

driver.find_elements_by_css_selector("div:nth-child(1) > div:nth-child(1) > span:nth-child(2) > div:nth-child(3) > span:nth-child(1)")

因此,我可以提取所有20个评论计数。 挑战:我需要能够(i)一次性提取它们,以及(ii)在20个结果列表中跟踪它们的位置。这是因为我将单击每个结果,从地图窗格中提取一些详细信息,然后将每个结果与审核计数进行整理。如何最好地实现这一目标?

1 个答案:

答案 0 :(得分:2)

尝试以下方法 - 它会连续抓取所有星级评分!然后应用python来清理它们 -

我尝试了this链接。

<强> Xpath的

//*[@class='_rl']/following-sibling::span[1]

返回

4.9(7)
3 reviews
3 reviews
4.2(24)
5.0(44)
4.9(16)
4.9(7)
4.7(5)
2 reviews
No reviews
5.0(14)
4.9(9)
4.7(5)
4.3(5)
1 review
4.6(7)
No reviews
4 reviews
2 reviews
4.7(12)

现在应用python进行清理(按照自己的方式进行 - 只是测试) -

>>> s = '''4.9(7)
3 reviews
3 reviews
4.2(24)
5.0(44)
4.9(16)
4.9(7)
4.7(5)
2 reviews
No reviews
5.0(14)
4.9(9)
4.7(5)
4.3(5)
1 review
4.6(7)
No reviews
4 reviews
2 reviews
4.7(12)'''
>>> mylist=s.split('\n')
>>> clndlist = [i.split("(")[-1].replace(")","") if "(" in i else i for i in mylist]
>>> clndlist

>>> ['7', '3 reviews', '3 reviews', '24', '44', '16', '7', '5', '2 reviews', 'No reviews', '14', '9', '5', '5', '1 review', '7', 'No reviews', '4 reviews', '2 reviews', '12', '']