目标:访问博客页面列表。在每个博客页面上,找到该博客页面的社交链接(Instagram,Facebook,Twitter)。
假设:每个社交链接的第一次出现将是正确的。页面中稍后出现的内容更有可能引用其他人的帐户。
理想的社交网址格式为www。 social_network_name .com / username
某些格式的网址不可取(例如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
问题:只要我匹配一个社交网址,它就会突破循环,并且不会继续寻找其他网络句柄。
我能想到的一些选择,如果不是很好。我是一个Noob。我非常感谢你的一些建议。
选项#1 - 遍历所有链接并测试ONE社交网络的首次匹配。循环遍历所有链接并测试NEXT社交网络的首次匹配。 (讨厌这个)
选项#2 - 为每个社交URL创建变量。为匹配创建一些标记,仅更新匹配的变量未设置。 (更好,但在我填写所有变量之后,我仍然会继续迭代)
选项#3 - 欢迎提出任何建议或意见。你会怎么做到这一点?
答案 0 :(得分:1)
<强> 建议 强>:
保留跟踪器并更新已处理的任何社交媒体网址。一旦他们全部被处理,然后突破循环。
<强> 代码 强>:
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
我希望这证明有用。