如何用Python检测Twitter账号是否存在?
Twitter账号存在性检测代码修改方案
问题背景
现有一段仅适用于Instagram的账号检测代码,希望修改为检测Twitter账号是否存在。尝试替换检测文本(如"This account doesn't exist"、"exist"或"account")后仍无法正常运行,原代码如下:
users = ["Sardoche","ElonMusk"] valid_accounts = [] def twitterchecker(users, valid_accounts): for user in users: r = get(url = f"https://twitter.com/{user}") soup = BeautifulSoup(r.text, "html.parser") if soup(text=lambda t: user in t.text) != []: valid_accounts.append(f'https://www.twitter.com/{user}') twitterchecker(users, valid_accounts)
原代码问题分析
- 页面匹配逻辑不可靠:原代码通过页面文本是否包含用户名判断账号存在性,但Twitter存在的账号页面中用户名会多次出现,不存在的页面可能因动态渲染导致静态HTML中无预期错误文本,判断失效。
- 未处理反爬机制:直接发起请求会被Twitter识别为非浏览器请求,返回403或其他非预期状态码,无法获取真实页面内容。
- 未利用状态码:Twitter账号不存在时通常返回404状态码,这是比文本匹配更可靠的判断依据。
修改后的可行代码
from requests import get from bs4 import BeautifulSoup users = ["Sardoche","ElonMusk", "ThisIsAFakeAccount12345"] valid_accounts = [] def twitterchecker(users, valid_accounts): # 模拟浏览器请求头,绕过基础反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } for user in users: url = f"https://twitter.com/{user}" try: r = get(url, headers=headers, allow_redirects=True) # 优先通过状态码判断:404表示账号不存在 if r.status_code == 404: continue # 处理特殊情况:部分不存在的账号可能跳转至搜索页,状态码为200 soup = BeautifulSoup(r.text, "html.parser") # 检测页面中是否存在账号不存在的提示元素 error_element = soup.find("div", {"data-testid": "empty_state_header_text"}) if error_element and "Sorry, we couldn’t find that page." in error_element.text: continue # 以上判断都不触发,说明账号存在 valid_accounts.append(url) except Exception as e: print(f"检测用户 {user} 时出错: {str(e)}") twitterchecker(users, valid_accounts) print("有效账号列表:", valid_accounts)
关键改动说明
- 添加请求头:模拟浏览器发送请求,绕过基础反爬机制,确保获取真实页面内容。
- 状态码优先判断:利用Twitter返回的404状态码快速识别不存在的账号,效率更高。
- 补充元素检测:针对部分不存在账号跳转至搜索页(状态码200)的情况,通过页面特定元素的文本内容二次验证。
- 异常捕获:处理请求过程中可能出现的网络错误等异常,避免程序崩溃。
内容的提问来源于stack exchange,提问作者crashixx
相关产品推荐
相关产品推荐

