Python中facebook-scraper无法爬取部分公开主页/资料及编码错误求助
Facebook爬虫问题解决指南
问题1:仅能爬取部分公开页面
你的脚本仅能成功爬取公共主页EvanCarmichaelcom,但无法爬取terrywadethompson、evan.tinstman这两个公开个人账号的内容,核心原因是Facebook的反爬策略差异:
- 公共主页的公开内容对未登录用户开放权限较高,而个人账号的公开内容,未登录状态下会被限制访问,即使页面标记为公开。
facebook_scraper库在未登录时,无法绕过Facebook对个人账号内容的访问限制。
解决步骤
- 获取Facebook登录凭证:
用浏览器登录Facebook,导出登录后的cookies(可使用浏览器插件导出),保存为facebook_cookies.json文件。 - 在爬虫中传入凭证:
修改脚本,在get_posts中添加cookies参数,示例如下:from facebook_scraper import get_posts import json # 加载cookies文件 with open('facebook_cookies.json', 'r') as f: cookies = json.load(f) pageList = ['EvanCarmichaelcom','terrywadethompson','evan.tinstman'] for pageName in pageList: print(pageName) # 传入cookies参数爬取内容 for post in get_posts(pageName, pages=2, cookies=cookies): print(post)
问题2:传入凭证后出现Unicode编码错误
传入凭证爬取evan.tinstman时,触发UnicodeEncodeError: 'charmap' codec can't encode characters in position 44-46: character maps to <undefined>,这是因为Windows系统默认控制台编码(如GBK)无法处理帖子中的特殊Unicode字符,导致输出失败。
解决方法
方法1:强制控制台输出为UTF-8编码
在脚本开头添加以下代码,修改标准输出的编码:
import sys sys.stdout.reconfigure(encoding='utf-8')
方法2:将内容写入文件而非控制台输出
避免直接在控制台打印含特殊字符的内容,改为写入UTF-8编码的文件:
from facebook_scraper import get_posts import json with open('facebook_cookies.json', 'r') as f: cookies = json.load(f) pageList = ['EvanCarmichaelcom','terrywadethompson','evan.tinstman'] for pageName in pageList: print(pageName) # 将帖子写入JSON文件 with open(f"{pageName}_posts.json", "w", encoding="utf-8") as f: for post in get_posts(pageName, pages=2, cookies=cookies): json.dump(post, f, ensure_ascii=False, indent=2)
方法3:过滤无法编码的字符
对帖子内容进行清理,忽略无法编码的字符:
for post in get_posts(pageName, pages=2, cookies=cookies): # 清理内容中的特殊字符 cleaned_content = post.get('content', '').encode('utf-8', errors='ignore').decode('utf-8') print(f"帖子内容:{cleaned_content}")
内容的提问来源于stack exchange,提问作者DablewCodes
相关产品推荐
相关产品推荐

