Python+;Selenium—web抓取和计算HTML中某些文本数据的出现次数

Python+;Selenium—web抓取和计算HTML中某些文本数据的出现次数,python,html,selenium,web-scraping,Python,Html,Selenium,Web Scraping,请帮忙。我试图从网站上获取数据,然后统计某些文本的出现次数。不幸的是,我不能提供实际的网站,但基本的是这个 网页被加载,我看到一个值列表,这些值位于表中(下面的代码反映了这一点)。页面看起来像这样 标题 表1 A00001 A00002 A00003 A00004 A00500 上面的每一行(A00001-A00500)都表示我需要单击的表链接。此外,每个链接都指向一个我需要从中提取信息的唯一页面 我使用selenium获取信息并将其存储为变量数据,如下面的代码所示。这是我的问题-我需

请帮忙。我试图从网站上获取数据,然后统计某些文本的出现次数。不幸的是,我不能提供实际的网站,但基本的是这个

网页被加载,我看到一个值列表,这些值位于表中(下面的代码反映了这一点)。页面看起来像这样


标题


表1


A00001

A00002

A00003

A00004

A00500


上面的每一行(A00001-A00500)都表示我需要单击的表链接。此外,每个链接都指向一个我需要从中提取信息的唯一页面

我使用selenium获取信息并将其存储为变量数据,如下面的代码所示。这是我的问题-我需要点击的链接/行的数量取决于我的用户在GUI中选择的时间范围。正如您从我的代码中看到的,从2011年5月1日到2011年5月30日的时间范围将生成一个包含184个不同链接的列表,我需要单击这些链接

from selenium import selenium
import unittest, time, re

class Untitled(unittest.TestCase):
def setUp(self):
    self.verificationErrors = []
    self.selenium = selenium("localhost", 4444, "*chrome", "https://www.example.com")
    self.selenium.start()

def test_untitled(self):
    sel = self.selenium
    sel.open("https://www.example.com")
    sel.click("link=Reports")
    sel.wait_for_page_to_load("50000")
    sel.click("link=Cases")
    sel.wait_for_page_to_load("50000")
    sel.remove_selection("office", "label=")
    sel.add_selection("office", "label=San Diego")
    sel.remove_selection("chapter", "label=")
    sel.add_selection("chapter", "label=9")
    sel.add_selection("chapter", "label=11")
    sel.type("StartDate", "5/1/2011")
    sel.type("EndDate", "5/30/2011")
    sel.click("button1")
    sel.wait_for_page_to_load("30000")
    Case 1 = sel.get_table("//div[@id='cmecfMainContent']/center[2]/table.1.0")
    Case 2 = sel.get_table("//div[@id='cmecfMainContent']/center[2]/table.2.0")
    Case 3 = sel.get_table("//div[@id='cmecfMainContent']/center[2]/table.184.0")

def tearDown(self):
    self.selenium.stop()
    self.assertEqual([], self.verificationErrors)
如果name==“main”: unittest.main()

我对两件事感到困惑

1) 让selenium在不提前知道链接数量的情况下单击页面上的所有链接的最佳方法是什么?我知道的唯一方法是让用户选择GUI中的链接数,该链接数将分配给变量,然后可以包含在以下方法中:

链接数=输入(“页面上有多少链接?”) sel.get_table(“//div[@id='cmecfMainContent']/center[2]/链接数”)

2) 我还不知道如何计算链接指向的页面上出现的某些数据

A00001将导致一个包含表值“Apples”的页面

A00002将导致一个包含表值“Oranges”的页面

A00003将导致一个包含表值“Apples”的页面 "

我知道selenium可以将它们存储为变量,但我不确定是否可以将它们保存为序列类型,每增加一次都会附加到原始列表(或添加到字典),然后可以使用len()函数对其进行计数


感谢您的帮助

我对python api不太熟悉,非常抱歉,但在java中,我知道使用xpath有一个函数可以获取xpath的出现次数。因此,您可以编写一个xpath选择器来查找所需的元素,然后获取该路径的出现次数

然后单击每一个,您可以使用元素选择器(如[1])附加xpath,因此如果您的xpath是
//somexpath/something do//somexpath/something[1]
,则可以获得第一个

希望有帮助

下面是一个例子:我用java编写了一个蹩脚的api,以便能够对xpath匹配集合执行类似于jquery的操作。我的构造函数匹配xpath获取计数,然后创建一个所有匹配的列表,这样我就可以执行类似于.clickAll()的操作

 public SelquerySelector(String selector, Selenium selenium) {
        super("xpath=(" + selector + ")[" + 1 + "]", selenium);
        this.xpath = selector;
        this.selenium = selenium;
        //find out how many elements match
        this.length = selenium.getXpathCount(this.xpath).intValue();
        //make an array of selectedElements
        for(int i = 2; i <= this.length; i++) {
            elements.add(new SelquerySelectedElement("xpath=(" + this.xpath + ")[" + i + "]", this.selenium));
        }
    }
for i in range(1,xpathmatchcount):
    Case[i] = sel.get_table("//div[@id='cmecfMainContent']/center[2]/table." + i + ".0")