Python和Selenium - 从多个兄弟元素抓取数据
好的,我刚开始学习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()