如何将列表中的字符串转换为URL?使用url.parse无效如何解决
问题解决方案
现有代码核心问题
- 缺失selenium相关模块导入:代码中使用的
webdriver、WebDriverWait、EC、By均未提前导入,运行直接报错 - 缩进逻辑错误:
wait.until、product_links两行代码缩进位置错误,不在循环体内,执行顺序完全不符合预期 - URL编码不规范:查询参数
p的硬编码存在无效片段,要转中文为URL编码需调用quote()方法处理,不能手动拼接编码片段 urlparse使用逻辑偏差:urlparse的作用是解析已有URL拆分出协议、域名、路径、参数等字段,不是用来将普通字符串转为可请求的合法URL,后者需要用quote()做编码处理
修正后完整代码
!pip install selenium from urllib.parse import urlparse, quote from urllib.request import urlopen import time # 补全selenium相关依赖导入 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By browser = webdriver.Chrome(executable_path='./chromedriver.exe') wait = WebDriverWait(browser,5) output = [] # 替换为你要搜索的中文关键词,自动做URL编码 keyword = "屈臣氏" encoded_keyword = quote(keyword) # 可自行修改页码范围 for i in range(1,2): # 构造合法URL target_url = f"https://tw.mall.yahoo.com/search/product?p={encoded_keyword}&pg={i}" # 如果需要解析URL结构,可调用urlparse:parsed_url = urlparse(target_url) browser.get(target_url) # 修正缩进,放在循环内部 wait.until(EC.presence_of_element_located((By.XPATH,"//ul[@class='gridList']"))) product_links = browser.find_elements(By.XPATH,"//ul[@class='gridList']/li/a") for link in product_links: href = link.get_attribute('href') print(href) output.append(href) # 输出前3条采集到的URL for b in output[:3]: print(b) # 如果要把列表中的所有URL字符串解析为结构化URL对象,执行以下代码即可 # parsed_url_list = [urlparse(url) for url in output]
补充说明
- 要把含中文的普通字符串转为可请求的合法URL,仅需要对中文/特殊字符部分调用
quote()做百分号编码即可 - 要解析已有URL的各个字段,才需要调用
urlparse(),返回结果会包含协议、域名、路径、查询参数等所有URL组成部分
内容的提问来源于stack exchange,提问作者Dingyen
相关产品推荐
相关产品推荐

