我一直在扯掉我的头发,玩弄各种变化:
'//*[@id="mw-content-text"]/div[2]/table/tbody/tr/td/div/ul/li/a'
作为XPath从此维基页面获取所有学区网址:http://en.wikipedia.org/wiki/List_of_school_districts_in_Arkansas。什么是正确的XPath?
提前致谢!
代码段:
print 3.1, tree.xpath('//*[@id="mw-content-text"]/div[2]')
print 3.2, tree.xpath('//*[@id="mw-content-text"]/div[2]/table')
print 3.3, tree.xpath('//*[@id="mw-content-text"]/div[2]/table/tbody')
print 3.4, tree.xpath('//*[@id="mw-content-text"]/div[2]/table/tbody')
print 3.5, tree.xpath('//*[@id="mw-content-text"]/div[2]/table/tbody/tr/td/div/ul/li/a/text()')
for row in tree.xpath('//*[@id="mw-content-text"]/div[2]/table/tbody/tr/td/div/ul/li/a/text()'):
print row
district_urls.append('http://en.wikipedia.org'+row.get('href'))
作为参考:
3.1 [<Element div at 0x1109f7f00>]
3.2 [<Element table at 0x1109f7f00>]
3.3 []
3.4 []
3.5 []
答案 0 :(得分:2)
我猜你一直在使用Firebug或类似的开发人员工具创建这个XPath表达式。他们处理需要<tbody/>
周围<tr/>
个标记的DOM,如果源代码中没有给出,则会插入这些标记。查看页面来源(不使用Firebug,必要时使用wget
或curl
)时,您会发现没有<tbody/>
个标记。
使用此表达式:
//*[@id="mw-content-text"]/div[2]/table/tr/td/div/ul/li/a
答案 1 :(得分:0)
试试这个:
//*[@id="mw-content-text"]/div[2]/table/tr/td/div/ul/li/a/text()