-
我试图从网站上搜集信息:
http://www.forexfactory.com/#tradesPositions
现在,我曾经有过这个论坛帮助我开始运行的一个并且正在运行,但我认为网站上的内容已经发生了变化,我不再使用的脚本。
我想减少“短”的数量。而且' long'澳元兑美元,欧元兑美元,英镑兑美元,美元兑日元,美元兑加元,新西兰元和美元兑瑞郎的头寸。
不是百分比,交易者的实际数量。
这是针对EURUSD
import lxml.html
from selenium import webdriver
driver = webdriver.Chrome("C:\Users\MY NAME\Downloads\Chrome Driver\chromedriver.exe")
url = ('http://www.forexfactory.com/#tradesPositions')
driver.get(url)
tree = lxml.html.fromstring(driver.page_source)
results_short = tree.xpath('//*[@id="flexBox_flex_trades/positions_tradesPositionsCopy1"]/div[1]/table/tbody/tr/td[2]/div[1]/ul[1]/li[2]/span/text()')
results_long = tree.xpath('//*[@id="flexBox_flex_trades/positions_tradesPositionsCopy1"]/div[1]/table/tbody/tr/td[2]/div[1]/ul[1]/li[1]/span/text()')
print "Forex Factory"
print "Traders Short EURUSD:",results_short
print "Traders Long EURUSD:",results_long
driver.quit()
返回
Forex Factory
Traders Short EURUSD: ['337 Traders ', ' ']
Traders Long EURUSD: [' 259 Traders']
除了数字之外,我想从结果中删除所有内容。我尝试过.strip()和.replace(),但都没有在列表上工作。对于那些我没有想到的人来说,这并不奇怪!
当我将相同的技术应用于AUDUSD时,我得到一个空列表。
import lxml.html
from selenium import webdriver
driver = webdriver.Chrome("C:\Users\Andrew G\Downloads\Chrome Driver\chromedriver.exe")
url = ('http://www.forexfactory.com/#tradesPositions')
driver.get(url)
tree = lxml.html.fromstring(driver.page_source)
results_short = tree.xpath('//*[@id="flexBox_flex_trades/positions_tradesPositionsCopy1"]/div[6]/table/tbody/tr/td[2]/div[1]/ul[1]/li[2]/span/text()')
results_long = tree.xpath('//*[@id="flexBox_flex_trades/positions_tradesPositionsCopy1"]/div[6]/table/tbody/tr/td[2]/div[1]/ul[1]/li[1]/span/text()')
s2 = results_short
l2 = results_long
print "Traders Short AUDUSD:",s2
print "Traders Long AUDUSD:",l2
返回
Traders Short AUDUSD: []
Traders Long AUDUSD: []
是什么给出的? Xpath无法正常工作吗?只需使用Chromes'检查元素'功能并导航到所需的数字,并复制路径。 EURUSD的方法相同。
理想情况下,最好设置一个可以插入tree.xpath的div编号列表,而不是重复所有不同货币的代码行以使其更整洁。所以,在它所拥有的Xpath中:
/div[number]/
最好有一个列表,即[1,2,3,4,5,6]可以插入,因为Xpath的其余部分对于货币是相同的。无论如何,这是一个可选的奖金,优先考虑的是获得所列所有货币的回报。
答案 0 :(得分:1)
您可以使用strip方法删除结果中的所有空格,这是我的示例代码:
for index in range(len(results_short)):
results_short[index] = results_short[index].strip()
if results_short[index] == "":
del results_short[index]
for index in range(len(results_long)):
results_long[index] = results_long[index].strip()
if results_long[index] == "":
del results_long[index]
对于该问题,您无法获得AUD的结果,因为在您单击"展开"之前,这些值未加载到页面中。按钮。但我发现您可以从以下页面获得结果:http://www.forexfactory.com/trades.php
因此您可以将url的值更改为:
url = ('http://www.forexfactory.com/trades.php')
对于此页面,由于CSS ID的名称已更改,您需要将值更新为:
results_short = tree.xpath('//*[@id="flexBox_flex_trades/positions_tradesPositions"]/div[6]/table/tbody/tr/td[2]/div[1]/ul[1]/li[2]/span/text()')
results_long = tree.xpath('//*[@id="flexBox_flex_trades/positions_tradesPositions"]/div[6]/table/tbody/tr/td[2]/div[1]/ul[1]/li[1]/span/text()')
然后应用上面提到的条带功能,你应该能够得到正确的结果。