从我在firefox上的网页上看这是一个xpath选择器。
id('ls-page')/x:div[5]/x:div[1]/x:div[2]/x:table/x:tbody/x:tr[2]/x:td[2]/x:a
所以我删除/ x:tbody,因为它是由firefox添加的。但是如何在表中获得具有相同基本Xpath的链接。唯一明显的区别是,对于表中的每个链接,tr增加1。
id('ls-page')/x:div[5]/x:div[1]/x:div[2]/x:table/x:tr[2]/x:td[2]/x:a
id('ls-page')/x:div[5]/x:div[1]/x:div[2]/x:table/x:tr[3]/x:td[2]/x:a
如果页面上有连续的链接表。而对我来说唯一的区别似乎是div从1增加到2。
所以第二个表链接。
id('ls-page')/x:div[5]/x:div[2]/x:div[2]/x:table/x:tr[2]/x:td[2]/x:a
/x:div[5]/x:div[1]
变为
/x:div[5]/x:div[2]
1)是否有用于概括XPATH选择器的方法或过程?
2)对于每个表,我是否必须创建两个单独的通用函数,一个用于检索表,另一个用于从表中检索链接?
注意我指的是此网站live nrl stats。我一直在阅读scrapy文档和beautifulsoup文档,但我对我正在学习的工具建议持开放态度。
答案 0 :(得分:1)
XPATH
是一种查询语言,我不知道任何自动化的查询概括方法,这是你必须根据文档结构自行解决的问题。
我首选的资料库是lxml.etree
。这是一个简单的查询工作示例,它应该返回所有匹配链接。
我已将html保存到工作目录中,以避免在测试时经常访问网站。
from lxml import etree
import os
local_file = 'season2012.html'
url = "http://live.nrlstats.com/nrl/season2012.html"
if not os.path.exists(local_file):
from urllib2 import urlopen
data = urlopen(url).read()
with open(local_file,'w') as f:
f.write(data)
else:
with open(local_file,'r') as f:
data = f.read()
doc = etree.HTML(data)
for link in doc.xpath('//table[@class="tablel"]/tr/td[2]/a'):
print "%s\t%s" % (link.attrib['href'],link.text)
产量:
/matches/nrl/match15300.html Melbourne v Newcastle
/matches/nrl/match15291.html Brisbane v St George Illawarra
/matches/nrl/match15313.html Penrith v Cronulla
/matches/nrl/match15312.html Parramatta v Manly
/matches/nrl/match15311.html Sydney Roosters v Warriors
[truncated]
我建议使用交互式python解释器在此示例中使用ElementTree对象doc
来测试您的查询,并查看其他XPATH
问题和答案,以便查询工作查询帮助你学习的例子。