Python处理含阿塞拜疆字母的链接异常 爬虫问题求助
解决URL中包含阿塞拜疆字母时的拆分异常问题
你遇到的问题根源在于非ASCII字符没有正确进行URL编码——Python直接拼接包含特殊字符的字符串到URL时,会出现编码异常,进而产生意外的空格或链接拆分。阿塞拜疆字母(比如ə)属于非ASCII字符,必须转换为URL兼容的百分号编码格式才能被服务器正确识别。
解决方案:用urllib.parse做标准URL编码
Python内置的urllib.parse模块提供了专门的URL编码工具,推荐使用quote_plus()方法——它既能把空格替换为URL标准的+符号,又会自动对非ASCII字符做百分号编码,完美解决你的问题。
修改后的完整代码
import requests from bs4 import BeautifulSoup as bs from urllib.parse import quote_plus # 新增编码工具导入 URL = 'http://marja.az/search?q=' # 建议用原始关键词(带空格),后续由工具自动转换格式 KEYWORDS = [ 'Vali Vəli' ] for key in KEYWORDS: # 对关键词做标准URL编码,确保特殊字符被正确处理 encoded_key = quote_plus(key) search_url = URL + encoded_key print(search_url) # 输出应为 http://marja.az/search?q=Vali+%C9%99li r = requests.get(search_url) soup = bs(r.content, "lxml") for data in soup.find_all("div", {"class": "searchNews"}): for a in data.find_all("a"): href = a.get("href") link = "http://marja.az/" + href print(link) r1 = requests.get(link) soup1 = bs(r1.content, "lxml") # 新闻标题 header = soup1.find("h1", attrs={"class": "title"}).text print(header) # 新闻内容 paragraph = soup1.find("div", attrs={"class": "text"}).findAll('p', text=True, recursive=False) for p in paragraph: print(p.text) # 发布日期(增加空值判断避免报错) date_elem = soup1.find('div', {'style': 'color: #af0000; margin:10px 0px 10px 0px; font-size:12px; font-weight:bold; text-align:left;'}) if date_elem: date = date_elem.text.split(",")[0].split(" ") date = date[0] + "-" + date[1] + "-" + date[2] print(date)
关键细节说明
- 编码逻辑:
quote_plus('Vali Vəli')会把ə转换为%C9%99,空格转换为+,最终得到Vali+%C9%99li,拼接后的URL完全符合HTTP标准,不会再出现拆分或空格问题。 - 额外优化:我给日期元素增加了空值判断,避免页面结构变化时触发
AttributeError,让代码更健壮。
内容的提问来源于stack exchange,提问作者Vali Valizada
相关产品推荐
相关产品推荐

