使用Python提取HTML页面元素的内容

时间:2016-12-03 13:21:35

标签: python xpath web-scraping

我获得了HTML页面的链接。如何使用其绝对XPath打开它并获取特定元素的内容。

from lxml import html
import requests
page = requests.get('http://www.professorpaddle.com/rivers/riverlist.asp')
tree = html.fromstring(page.content)
table_data=[]
temp_dict={}
temp = tree.xpath('//a[@class="pathm"]')
for i in temp:
  link=i.attrib.get('href')
  link="http://www.professorpaddle.com/rivers/"+link
  temp_dict['name']=i.text
  temp_dict['link']=link
  print(link)
  temp_page=requests.get(link)
  temp_tree=html.fromstring(temp_page.content)
  x=temp_tree.xpath('/html/body/element/table/tbody/tr[2]/td/table/tbody/tr/td/table[1]/tbody/tr[2]/td[3]/table/tbody/tr[3]/td[2]/font')
  print(x)
  break

1 个答案:

答案 0 :(得分:1)

xpath似乎无法找到tbody的。我还试图简化xpath搜索字符串,使自己更容易。当我这样做的时候,在我发现其中一个类有两个拼写之前不久。这是我对一页的看法。

>>> fontItems = tree.xpath('..//table[@class="tableBorder" or @class="tableborder"][1]/tr/td/font[@class="path"]')
>>> len(fontItems)
12
>>> for item in fontItems:
...     list(item.itertext())
...     
['GPS/GIS']
['Maps']
['Put In Longitude : ']
['-121.29268']
['Put In Latitude : ']
['47.8034515']
['Take Out Longitude : ']
['-121.33998']
['Take Out Latitude : ']
['47.7137985']
['County : ']
['Snohomish']

几乎忘了,我更喜欢在上使用匹配,但显然此实现中的xpath并不提供正则表达式。

补充,回应评论:

M-1