我正在尝试构建一个机器人来从我的易趣列表中获取详细信息,通常我会使用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
答案 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