使用Scrapy Selector提取Chrome书签链接仅获部分结果的问题排查
问题分析与解决
核心问题:编码解析错误
你用rb模式读取二进制文件后直接传入Selector的text参数,会导致编码不匹配,Scrapy解析HTML时出现内容截断,从而丢失大量链接。Chrome导出的书签HTML文件默认是UTF-8带BOM编码,直接传二进制字节串会破坏解析逻辑。
修正后的代码
from scrapy import Selector html_path = r'C:\Users\super\Downloads\Desktop\temp\html\bookmarks_9_13_22.html' xpath = r'//@href' # 使用utf-8-sig编码读取,处理文件中的BOM头 with open(html_path, 'r', encoding='utf-8-sig') as f: source = f.read() target = Selector(text=source).xpath(xpath).getall() print(len(target))
额外验证步骤
- 打开书签HTML文件,查看源码确认所有链接都存在于
<a>标签的href属性中(Chrome导出的书签都是静态链接,不会有动态生成的情况)。 - 读取文件后可以打印
len(source),确认文件内容被完整读取,没有截断。
内容的提问来源于stack exchange,提问作者Kai
相关产品推荐
相关产品推荐

