如何在跟踪结果顺序的同时合并 WebDriver find_elements_by* 调用?
How to combine WebDriver find_elements_by* calls while keeping track of the order of results?
在典型的 Google 本地搜索结果页面上,例如 this 有 20 个结果:
评论以 'No reviews' 形式给出,可以使用以下方法提取:
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 个结果列表中的位置。这是因为我将单击每个结果,从地图窗格中提取一些详细信息,然后将这些与每个结果的评论计数进行核对。如何最好地实现这一目标?
试试下面的方法——它会抓取所有连续的但有星级的!然后应用python清理它们-
我尝试了 this link。
Xpath
//*[@class='_rl']/following-sibling::span[1]
它returns
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', '']
在典型的 Google 本地搜索结果页面上,例如 this 有 20 个结果:
评论以 'No reviews' 形式给出,可以使用以下方法提取:
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 个结果列表中的位置。这是因为我将单击每个结果,从地图窗格中提取一些详细信息,然后将这些与每个结果的评论计数进行核对。如何最好地实现这一目标?
试试下面的方法——它会抓取所有连续的但有星级的!然后应用python清理它们-
我尝试了 this link。
Xpath
//*[@class='_rl']/following-sibling::span[1]
它returns
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', '']