Python和Selenium - 从多个兄弟元素抓取数据

1 投票
1 回答
639 浏览
提问于 2025-04-17 21:06

好的,我刚开始学习Python,当然也在学习Selenium。我想从一个网页上抓取数据,然后在Python中处理这些数据,让Selenium点击链接并记录时间等等……

我遇到的问题是,网页的格式并不是我想要的。原本我希望看到的是这样的结构:

标题 链接1 链接2 标题2 链接3 链接4

但实际上我看到的是这样的:

<tr>
    <td>title<td>
</tr>
<tr>
    <td>
        <a href>link1</a>
    </td>
</tr>
<tr>
    <td>
        <a href>link2</a>
    </td>
</tr>
<tr>
    <td>
        <a href>link3</a>
    </td>
</tr>

这是我正在处理的HTML - http://pastebin.com/663T7mXc

我想做的是获取所有的链接,但根据它们所属的标题进行分类。例如:

标题 链接1 链接2 标题2 链接3 链接4 链接5 标题3 链接6

依此类推。

因为这些链接并不是和标题在同一个标签下,所以我发现这几乎是不可能做到的。

这是我目前的进展:

def test():
    print ("testing")
    browser = webdriver.Chrome()
    browser.get("http://urlforpage.com")
    meetings = browser.find_elements_by_xpath('/html/body/div[2]/table[2]/tbody/tr/td')
    i=0
    for meet in meetings:
        venue = meet.get_attribute("class")
        if venue == "bold":
            print "Venue: " + str(i) + " " + meet.text
            i+=1
        elif venue == "racing-insert-linked-events nextoff-inner-wrapper nextoff-scrollable-wrapper":
            print ("links")
            print venue.href


test()

我根据“bold”这个类来提取标题,但我的问题是,我不知道如何从其他标签中提取链接的URL和链接文本。

任何帮助都会非常感激。谢谢!

1 个回答

0

你是在尽量少改动代码的情况下,想要实现这个目标吗?

def test():
    print ('testing')
    browser = webdriver.Chrome()
    browser.get('http://urlforpage.com')
    meetings = browser.find_elements_by_xpath('/html/body/div[2]/table[2]/tbody/tr/td')
    for meet in meetings:
        if meet.get_attribute('class') == 'bold':
            print 'Venue: {venue}'.format(venue=meet.text)
        else:
            try:
                anchor = meet.find_element_by_tag_name('a')
                print 'link: {link}, text: {text}'.format(link = anchor.get_attribute('href'), text = anchor.text)
            except NoSuchElementException:
                pass  # Are you worried if something is neither a title (bold) nor contains an anchor?


test()

撰写回答