在单个循环中 运行 进行多项测试的最有效方法是什么? Python
What is the most efficient way to run multiple tests in a single loop? Python
目标:访问博客页面列表。在每个博客页面上找到该博客页面的社交 links(Instagram、Facebook、Twitter)。
假设:每个社交 link 的第一次出现都是正确的。出现在页面后面的更可能是指其他人的帐户。
理想的社交 URL 格式是 www.social_network_name.com/username
有些URL的格式是不可取的(例如instagram.com/abc/)
def check_instagram(url):
if 'instagram.com/' in url and "instagram.com/abc/" not in url::
return True
def check_facebook(url):
if 'facebook.com/' in url and "facebook.com/abc/" not in url::
return True
#my list of pages t be parsed
pages_to_check = ['www.url1.com', 'www.url2.com', ... 'www.urn_n.com']
#iterate through my list of pages t be parsed
for page in pages_to_check :
#get all the links on the page
page_links = *<selenium code to get all links on page>*
我试过了...
For link in page_links:
#when first Instagram handle found
if check_instagram(url):
*code to write to a dataframe here*
break
#when first Instagram handle found
if check_facebook(url):
*code to write to a dataframe here*
break
问题:我一匹配到一个社交URL,它就跳出循环,不再继续寻找其他网络句柄。
有些选项我觉得不是很好。我是菜鸟。我真的很感激这里的一些建议。
选项 #1 - 遍历所有 link 并测试一个社交网络的第一场比赛。遍历所有 link 并测试 NEXT 社交网络的第一场比赛。 (讨厌这个)
选项 #2 - 为每个社交创建变量 URL。为匹配创建一些标记,只更新未设置匹配的变量。 (更好,但我仍然会在填充所有变量后继续迭代)
选项 #3 - 欢迎提出任何建议或意见。你会如何处理这个问题?
建议:
保留跟踪器并更新任何已处理的社交媒体 URL。一旦它们都被处理完,然后跳出循环。
代码:
tracker = dict.fromkeys(['facebook', 'instagram'], False)
for link in page_links:
# if all the values of the tracker are true, then break out of the loop
if all(v for v in tracker.values()):
break
# when first Instagram handle found
if check_instagram(url):
*code to write to a dataframe here*
tracker['instagram'] = True
# when first Facebook handle found
if check_facebook(url):
*code to write to a dataframe here*
tracker['facebook'] = True
希望这有用。
目标:访问博客页面列表。在每个博客页面上找到该博客页面的社交 links(Instagram、Facebook、Twitter)。
假设:每个社交 link 的第一次出现都是正确的。出现在页面后面的更可能是指其他人的帐户。
理想的社交 URL 格式是 www.social_network_name.com/username
有些URL的格式是不可取的(例如instagram.com/abc/)
def check_instagram(url):
if 'instagram.com/' in url and "instagram.com/abc/" not in url::
return True
def check_facebook(url):
if 'facebook.com/' in url and "facebook.com/abc/" not in url::
return True
#my list of pages t be parsed
pages_to_check = ['www.url1.com', 'www.url2.com', ... 'www.urn_n.com']
#iterate through my list of pages t be parsed
for page in pages_to_check :
#get all the links on the page
page_links = *<selenium code to get all links on page>*
我试过了...
For link in page_links:
#when first Instagram handle found
if check_instagram(url):
*code to write to a dataframe here*
break
#when first Instagram handle found
if check_facebook(url):
*code to write to a dataframe here*
break
问题:我一匹配到一个社交URL,它就跳出循环,不再继续寻找其他网络句柄。
有些选项我觉得不是很好。我是菜鸟。我真的很感激这里的一些建议。
选项 #1 - 遍历所有 link 并测试一个社交网络的第一场比赛。遍历所有 link 并测试 NEXT 社交网络的第一场比赛。 (讨厌这个)
选项 #2 - 为每个社交创建变量 URL。为匹配创建一些标记,只更新未设置匹配的变量。 (更好,但我仍然会在填充所有变量后继续迭代)
选项 #3 - 欢迎提出任何建议或意见。你会如何处理这个问题?
建议:
保留跟踪器并更新任何已处理的社交媒体 URL。一旦它们都被处理完,然后跳出循环。
代码:
tracker = dict.fromkeys(['facebook', 'instagram'], False)
for link in page_links:
# if all the values of the tracker are true, then break out of the loop
if all(v for v in tracker.values()):
break
# when first Instagram handle found
if check_instagram(url):
*code to write to a dataframe here*
tracker['instagram'] = True
# when first Facebook handle found
if check_facebook(url):
*code to write to a dataframe here*
tracker['facebook'] = True
希望这有用。