Python从html文档中获取部分并切割为大小

时间:2015-02-18 09:47:24

标签: python html

我正在尝试构建一个机器人来从我的易趣列表中获取详细信息,通常我会使用API​​,但我需要的部分数据在描述中。所以我抓住页面的HTML数据,在里面查找一个字符串,然后在使用while循环后尝试格式化数据,但我想我的循环卡住了。我相信它应该有效。

它打印 - 打印itemData但在此之后挂起,也有人知道更好的方法吗?

    import os
    import urllib

    itemURL = urllib.urlopen('http://www.ebay.co.uk/itm/161333231002')

    itemDetails = itemURL.read()

    toFind = 'Our Number'

    ourPos = itemDetails.find(toFind) + 10

    itemData = itemDetails[ourPos:ourPos+15]
    print itemData

    def Pos(Pos1, PageData):
        while PageData[Pos1:Pos1+1] == ' ' or PageData[Pos1:Pos1+1]:
            Pos1 = Pos1 + 1
            PosS = Pos1
            PosE = PosS
        while PageData[PosE:PosE+1] != '<':
            PosE = PosE + 1
        print PageData[PosS:PosE]

if ourPos == -1:
    print 'Not found'
else:
    Pos(ourPos, itemData)
print Done

2 个答案:

答案 0 :(得分:1)

第二个while循环是无限的,因为第一个while循环将PosE的值设置为超出PageData长度范围的某个值,因此while循环条件“PageData [Pos1:Pos1 + 1]!='&lt ;'“始终为真,因为PageData [Pos1:Pos1 + 1] =''不等于'&lt;'。通过第一个while循环检查Pos1的值。你会得到答案。

答案 1 :(得分:0)

我说你有几种方法可以做到这一点。要么循环遍历行数组,请将其混合为字符串并运行正则表达式。

例如在python 2.7中,它是这样的:

itemDetails = itemURL.read()
desc = ''
dataRows = itemDetails.split('\n')
for x in xrange(len(dataRows)):
    if line == '<div id="viTabs_0_cnt" class="content sel">':
        y = 0
        while dataRows[x+y+3] != '<div id="viTabs_1_cnt" class="content">' or y <= 100:
            desc += dataRows[x+y+1]
            y+=1
        break