从页面中提取URL?

时间:2013-08-14 18:08:27

标签: python xpath

我一直在扯掉我的头发,玩弄各种变化:

'//*[@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 []

2 个答案:

答案 0 :(得分:2)

我猜你一直在使用Firebug或类似的开发人员工具创建这个XPath表达式。他们处理需要<tbody/>周围<tr/>个标记的DOM,如果源代码中没有给出,则会插入这些标记。查看页面来源(使用Firebug,必要时使用wgetcurl)时,您会发现没有<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()