使用BeautifulSoup提取含特定波斯语的广告代码问题求助
代码问题排查与修正
核心错误点
直接对Tag对象调用字符串方法
content是BeautifulSoup返回的Tag实例,不是字符串,不能直接使用split()。必须先通过content.get_text()或content.text提取标签内的纯文本内容。逻辑错误的条件判断
就算能成功得到分词列表,words == "توافقی"这种列表与字符串的比较逻辑也永远不成立。正确逻辑是检查目标词汇是否存在于文本或分词列表中。
修正后的代码
import requests from bs4 import BeautifulSoup r = requests.get("https://divar.ir/s/tehran") r.encoding = "utf-8" # 显式指定UTF-8编码,避免波斯语乱码 soup = BeautifulSoup(r.text, "html.parser") results = soup.find_all("div", attrs={"class": "kt-post-card__body"}) for content in results: post_text = content.get_text(strip=True) # 直接检查文本是否包含目标词汇,无需分词 if "توافق" in post_text or "توافقی" in post_text: print(post_text) # 若需要打印完整广告的HTML结构,替换为print(content)
额外说明
如果后续发现爬取的内容不全,大概率是因为divar.ir使用了JavaScript动态渲染内容,此时需要改用selenium或requests-html等工具处理动态页面。但当前代码足以解决静态内容的提取问题。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

