微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python + Selenium-Web抓取并计数HTML中某些文本数据的出现

如何解决Python + Selenium-Web抓取并计数HTML中某些文本数据的出现

|| 请帮忙。我试图从网站获取数据,然后计算某些文本的出现次数。不幸的是,我无法提供实际的网站,但是基本知识就是这样。 加载了网页,并向我提供了一个位于表中的值列表(下面的代码反映了这一点)。该页面看起来像这样。 标头 表格1 A00001 A00002 A00003 A00004 ...... A00500 上面的每行(A00001- A00500)代表表格我需要单击的链接。此外,每个链接都指向一个唯一的页面,我需要从该页面提取信息。 我正在使用硒来获取信息并将其存储为变量数据,如下面的代码所示。这是我的问题-我需要单击的链接/行数取决于用户在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)
如果名称== \“ main \”:     unittest.main() 我对两件事感到困惑。 1)什么是最好的方式来获取硒来单击页面上的所有链接,而无需提前知道链接数量?我知道如何执行此操作的唯一方法是让用户在GUI中选择链接数,该链接数将分配给变量,然后可将其包含在以下方法中: number_of_links =输入(\“页面上有多少个链接?\”) sel.get_table(\“ // div [@id = \'cmecfMainContent \'] / center [2] / number_of_links \”) 2)我也对如何计算链接指向的页面上出现的某些数据的出现次数感到困惑。 即 A00001指向包含表值“ Apples”的页面 A00002指向包含表值“ Oranges”的页面 A00003指向包含表值“ Apples”的页面 \“ 我知道硒可以将它们存储为变量,但是我不确定是否可以将它们另存为序列类型,每增加一次出现都添加到原始列表中(或添加到字典中),然后可以用len()函数计数。 谢谢你的帮助     

解决方法

        我不熟悉python api,对此感到抱歉,但是在java中,我知道使用xpath可以获取xpath的出现次数。因此,您可以编写xpath选择器来查找所需的元素,然后获取该路径的出现次数。 然后单击每个,您可以在xpath上附加一个像[1]这样的元素选择器,这样,如果您的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));
        }
    }
继承完整的代码,以备不时之需: http://paste.zcd.me/Show.h7m1?id=8002 因此,我想回答您的问题(不知道xpath如何与表匹配),您可能会做类似的事情
//div[@id=\'cmecfMainContent\']/center[2]/table
并获得匹配的数量以获取链接总数,然后进行循环。如果您无法使用xpath做到这一点,请继续假设它们是另一个链接,直到您被接受为止
for i in range(1,xpathmatchcount):
    Case[i] = sel.get_table(\"//div[@id=\'cmecfMainContent\']/center[2]/table.\" + i + \".0\")
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。