大佬看看吧关于python的xpath函数问题
我在用xpath的时候发现如果提取数据时为空就不返回数据如图:用xpath提取出来时这样的:
而我想要的数据时这样的
['阿联酋迪拉姆', '','174.12', '187.06', '','182.23', '2020.11.05 18:11:51', '18:11:51', '澳大利亚元', '476.31', '461.51', '479.82', '481.94', '480.53', '2020.11.05 18:11:51', '18:11:51', ]
import requests
from lxml import etree
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"}
URL = 'https://www.boc.cn/sourcedb/whpj/index.html'
catalog =['货币名称', '现汇买入价', '现钞买入价', '现汇卖出价', '现钞卖出价', '中行折算价', '发布日期', '发布时间']
result ='\t'.join(catalog)
with open("./今日国际货币汇率.txt",'w+') as fp:
fp.write(result)
# 进行数据分析
def mysj(URL):
res = requests.get(url=URL,headers=headers, timeout=3)
res.encoding ='UTF-8'
res = etree.HTML(res.text)
returnres
def handle(res):
catalog = res.xpath('//div/div/table/tr/td/text()')
return catalog
res = mysj(URL)
data = handle(res)
print(data)
num = []
for x in range(0,len(data)):
if u'\u4e00' <= data <= u'\u9fff':
num.append(x)
print(num)
num.append(len(data))
s=[]
x1=0
count=-1
for x in num :
if x == 0 :
continue
count +=1
b = data:x]
s.append(b)
print(s)
data=[]
for x in range(0,len(s)):
data.append('\t'.join(s))
data = ('\n'.join(data))
print(data)
with open("./今日国际货币汇率.txt",'a') as fp:
fp.write(data)
加个判断吧 本帖最后由 无敌小车 于 2020-11-5 20:44 编辑
用正则它不香吗,bs4也行啊。还有这样写比较好
/html/body/div/div/div/div/table/tbody/tr 本帖最后由 thepoy 于 2020-11-5 20:53 编辑
给你举个例子:
a = html.xpath('//tr[@id="xxx"]')# a = None
b = a if a else ''# b = '' thepoy 发表于 2020-11-5 20:51
给你举个例子:
a = html.xpath('//tr[@id="xxx"]')# a = None
b = a if a e ...
那如果是一组数据进行处理,那一个数据中我本来有想提取8组数据,可其中有一组有一个数据是none这样只能提取7组,那组none被系统自动忽略了,怎么样处理呢? 秃头崽的头发 发表于 2020-11-5 21:36
那如果是一组数据进行处理,那一个数据中我本来有想提取8组数据,可其中有一组有一个数据是none这样只能 ...
你这个问题就很奇怪,一个会处理,一组就不会处理吗?怎么会问出这种问题来?
# catalog = res.xpath('//div/div/table/tr/td/text()')
catalog = res.xpath('//div/div/table/tr/td')
for i in range catalog:
if i.xpath('/text()'):
...
else:
...
页:
[1]