我正试图从一个站点(代码中的链接)刮去到国外的旅行者数量。出于某种原因,当我实际显示数据时,它会忽略任何超过999,999的数字。也许有人可以发现我在这里缺少的东西。
import requests
from lxml import html
import csv
import pandas as pd
import re
r = requests.get('http://data.worldbank.org/indicator/ST.INT.ARVL/countries/1W page=4&order=wbapi_data_value_2014%20wbapi_data_value%20wbapi_data_value- last&sort=asc&display=default')
data = html.fromstring(r.text)
Data1995 = []
Data_1995 = data.xpath("//tbody/tr[td]/td[2]/text()")
for i in Data_1995:
i = i.encode('ascii','ignore').strip()
i = re.sub('[()]', '', i) # removing ()
Data1995.append(i)
Data1995
答案 0 :(得分:1)
另一种方法:
Data1995 = []
for elem in data.xpath("//tbody/tr[td]/td[2]"):
i = elem.xpath("string(.)")
i = i.encode('ascii','ignore').strip()
i = re.sub('[()]', '', i) # removing ()
Data1995.append(i)
从XPath表达式中省略text()
步骤将返回td
个元素。然后elem.xpath("string(.)")
提取每个td
元素的string-value。对于element nodes,字符串值“是文档顺序中元素节点的所有文本节点后代的字符串值的串联。”
我推荐这种技术,因为它更加强大。请使用以下td
元素,例如:
<td>A <i>simple</i> example</td>
选择td/text()
将返回包含A
和example
的两个文本节点。通常,这不是你想要的。我描述的方法返回A simple example
。
答案 1 :(得分:0)
汇总来自 cricket_007 和 Padraic Cunningham 的评论 您可以尝试以下xpath:
//tbody/tr[td]/td[2][not(span)]/text() |
//tbody/tr[td]/td[2]/span/text()