2016-12-29 74 views
0

我正在看一个关于在python中解析web的教程。这是获取实时股票数据的代码。代码运行良好。Python,Web解析

import re 
    import urllib.request 

    # https://www.google.com/finance?q= 
    url = "https://www.google.com/finance?q=" 
    stock = input("Enter Your Stock : ") 
    url = url + stock 
    data = urllib.request.urlopen(url).read() 
    newData = data.decode('utf-8') 
    # meta itemprop="price" 
    m = re.search('meta itemprop="price"', newData) 
    start = m.start() 
    end = start + 50 
    newStock = newData[start:end] 
    m = re.search('content="', newStock) 
    start = m.end() 
    newStock1 = newStock[start:] 
    m = re.search('/', newStock1) 
    start = 0 
    end = m.end() - 3 
    final = newStock1[0:end] 
    print("The Value Of " + stock + " Is " + final) 

但我不代码理解这两个部分:

start = m.start() 
    end = start + 50 # Why + 50 ? 

    start = 0 
    end = m.end() - 3 # Why - 3 ? 

谁能给我一个解释?请详细说明

+0

您认为本教程在哪里? – Dmitry

+0

它实际上是课程的一部分 –

+1

请提供工作库存。 – ppasler

回答

0

所以,第一个问题:

start = m.start() 
end = start + 50 # Why + 50? 

为了更容易理解为什么+50是存在的,你需要看起来有点超前和后位:

newData = data.decode('utf-8') 
# meta itemprop="price" 
m = re.search('meta itemprop="price"', newData) 
start = m.start() 
end = start + 50 
newStock = newData[start:end] 

线由线:

  • newData包含抓取的页面的UTF-8表示(FO如果我们试图获得苹果股票的价值,则例如https://www.google.com/finance?q=aapl)。

  • m是匹配对象:在newData其中meta itemprop="price"开始发生,在那里结束+一堆其他信息(签出该文档以获得更多详细的信息:python2python3

  • start是那么newData中匹配开始的位置

  • end if start + 50因为这是包含价格的HTML元素的假定最大长度。例如,如果我看Apple,那就是: <meta itemprop="price" content="116.73" />,其长度为42个字符。

  • newStock现在将meta itemprop="price" content="116.73" />

继续从这里到了第二个问题:

start = 0 
end = m.end() - 3 # Why - 3 ? 

与前面的例子,让我们得到更多的一些背景:

newStock = newData[start:end] 
m = re.search('content="', newStock) 
start = m.end() 
newStock1 = newStock[start:] 
m = re.search('/', newStock1) 
start = 0 
end = m.end() - 3 
final = newStock1[0:end] 

一行行:

  • 我们已经提到,现在newStockmeta itemprop="price" content="116.73" />

  • m是新的正则表达式匹配对象:凡在newStockcontent="开始发生,结束等。

  • start是匹配

  • newStock1然后是content="后与第一字符开始并在所述字符串的末尾端的newStock子串的,所以newStock1116.73" />

  • ...最后一个正则表达式!

  • start分配0但不实际使用了

  • endm.end() - 3,因为我们知道,从数(股票价值)的结束正好三个字符,直到/字符(包括字符):",/

希望这有助于!

+0

它帮了我很多。谢谢 。我很感激 –