Python Selenium爬取电商标题不使用.get_attribute()的方法
无需调用
.get_attribute()的标题提取方案 以下是两种可直接落地的实现路径,完全规避你提到的方法调用:
方案1:执行原生JavaScript读取DOM属性
直接通过Selenium的脚本执行能力,在浏览器页面上下文里用原生JS读取元素属性,全程不调用WebElement封装的.get_attribute()方法,属性读取逻辑和浏览器原生行为完全一致,准确率最高。
核心替换代码如下:from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium import webdriver import pandas as pd # 把driver初始化放到循环外,避免每开一页就启动一次浏览器,提升效率 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) title_list=[] price_list=[] description_list = [] rating_list = [] rating_star_list = [] for page in range(1,3): # 修复原代码分页拼接错误,原逻辑会生成错误的带参地址 website = f'https://www.skroutz.gr/c/40/kinhta-thlefwna.html?from=families&page={page}' driver.get(website) titles = driver.find_elements("class name",'js-sku-link') for title in titles: # 用JS直接读取元素title属性,替代get_attribute调用 title_val = driver.execute_script('return arguments[0].title', title) title_list.append(title_val)方案2:直接解析页面源代码提取属性
拿到页面完整HTML源码后,用HTML解析库直接提取目标标签的属性,全程不需要依赖Selenium的元素属性接口,解析速度比逐元素读取更快。需要提前安装beautifulsoup4和lxml依赖。
核心实现代码:from bs4 import BeautifulSoup # 在driver.get(website)等待页面加载完成后,直接取源码解析 driver.get(website) soup = BeautifulSoup(driver.page_source, 'lxml') # 直接通过CSS选择器找所有目标标签,读取title属性 page_titles = [item['title'] for item in soup.select('a.js-sku-link')] title_list.extend(page_titles)
补充:如果确认目标站点
.js-sku-link标签的可见文本和title属性内容完全一致,也可以直接用title.text读取元素可见文本来获取标题,这个是Selenium对元素渲染文本的封装属性,不属于.get_attribute()调用,但要注意部分商品标题过长被CSS截断时,拿到的文本会不完整,优先选用前两种方案更稳妥。
内容的提问来源于stack exchange,提问作者Lefteris Kyprianou
相关产品推荐
相关产品推荐

