秃头崽的头发 发表于 2020-11-5 18:20

大佬看看吧关于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)

bags 发表于 2020-11-5 20:26

加个判断吧

无敌小车 发表于 2020-11-5 20:40

本帖最后由 无敌小车 于 2020-11-5 20:44 编辑

用正则它不香吗,bs4也行啊。还有这样写比较好
/html/body/div/div/div/div/table/tbody/tr

thepoy 发表于 2020-11-5 20:51

本帖最后由 thepoy 于 2020-11-5 20:53 编辑

给你举个例子:
a = html.xpath('//tr[@id="xxx"]')# a = None
b = a if a else ''# b = ''

秃头崽的头发 发表于 2020-11-5 21:36

thepoy 发表于 2020-11-5 20:51
给你举个例子:
a = html.xpath('//tr[@id="xxx"]')# a = None
b = a if a e ...

那如果是一组数据进行处理,那一个数据中我本来有想提取8组数据,可其中有一组有一个数据是none这样只能提取7组,那组none被系统自动忽略了,怎么样处理呢?

thepoy 发表于 2020-11-6 19:38

秃头崽的头发 发表于 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]
查看完整版本: 大佬看看吧关于python的xpath函数问题