python - 当没有更多要附加到列表的项目时,如何打破循环?
问题描述
我正在编写一个从网站中提取内部链接的脚本。当它转到列表中的内部链接时,它会将无法识别的链接附加到列表中。
当它附加了所有内部链接时,我想打破循环。
addr = "http://andnow.com/"
base_addr = "{0.scheme}://{0.netloc}/".format(urlsplit(addr))
o = urlparse(addr)
domain = o.hostname
i_url = []
def internal_crawl(url):
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0'}
r = requests.get(url, headers = headers).content
soup = BeautifulSoup( r, "html.parser")
i_url.append(url)
try:
for link in [h.get('href') for h in soup.find_all('a')]:
if domain in link and "mailto:" not in link and "tel:" and not link.startswith('#'):
if link not in i_url:
i_url.append(link)
# print(link)
elif "http" not in link and "tel:" not in link and "mailto:" not in link and not link.startswith('#'):
internal = base_addr + link
if link not in i_url:
i_url.append(internal)
print(i_url)
except Exception:
print("exception")
internal_crawl(base_addr)
for l in i_url:
internal_crawl(l)
我尝试添加以下代码,但无法正常工作。我不确定这是否是因为我的名单正在改变。
for x in i_url:
if x == i_url[-1]:
break
如果同一项目连续两次在列表中的最后一个,有没有办法打破循环?
解决方案
不完全确定您要做什么。如果我理解正确,一种方法是:
prev = None
for x in i_url:
if x == prev:
break
# do stuff
prev = x
推荐阅读
- julia - 如何让 Automa.jl 接受来自标准输入的输入?
- javascript - iframe Vimeo 视频结束屏幕按钮操作更改
- raspberry-pi - 在 Raspberry Pi 上安装新的 Linux 发行版
- react-native - 反应原生问题
- python - python for循环没有遍历字典列表的所有索引
- android-studio - Android Studio:如何关闭快捷方式列表选项卡
- base64 - 12C BPEL 中的 Base64 编码正在用 BPEL 变量名替换父标记
- mysql - 如何将 MySQL 的响应添加到 Redux?
- elasticsearch - ElasticSearch:Active_Primary_sherds 为 0,活动分片也为 0
- java - 覆盖 Java 中的 System 类,更准确地说是 currentTimeMillis