我有一个代码,它使用while循环来打印网页的<a href>
和</a>
标记中包含的内容。我可以提取所需的索引以及它们之间的任何内容,也可以打印它。该程序应该只打印一次url,然后继续并增加索引,直到它找到<a href>
和</a>
的下一个索引值,打印它们之间的任何内容并继续这样做直到字符串结束,打印在单独的行上找到的每个新URL。这是代码:
text = """ohsfhskfheifhsefis <a href = "fdnsfjsnfsnfns snkfsndfskj"</a>
<a href = "snfksnfsdf"</a>"""
index = 0
a = 0
b = 0
while index < len(text):
a = text.find('href', index)
b = text.find('/a', index)
print(text[a:b])
index = index + 2
if index >= len(text):
print("End")
break
但是,当我运行程序时,它会出现故障,如图所示。
显然,我使用的逻辑在这里是错误的。我知道还有其他更简单的方法可以完成这项任务,但我没有更复杂的东西,因为我最近刚刚开始学习Python,并希望现在这样做。
On the left is the first part of the Program. On the right is the second.
您还可以清楚地看到空格被遗漏,因为程序会在索引的每个增量处打印网址。
非常感谢任何形式的帮助。
答案 0 :(得分:1)
您的搜索以index
设置为0
开始,然后在第22位找到href
文字。然后将索引增加到2
,再次搜索,再次搜索在22号找到文字。
如果您想搜索以继续过去最后一场比赛,则需要在最后一场比赛后将index
设置为位置:
index = a + 1
现在,下一个text.find()
调用开始在索引23处搜索。
您还需要测试文本是否不:
if a < 0 or b < 0:
break
不要手动搜索这样的文本,而应考虑使用HTML解析器。例如,BeautifulSoup对您的搜索很简单。
答案 1 :(得分:0)
另一种建议:
for token in text.split('href="')[1:]:
print token.split('"')[0]