news 2026/2/14 10:33:45

基于Selenium的自动化Web数据采集实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Selenium的自动化Web数据采集实践

文章目录

    • 1. 环境配置与浏览器启动
    • 2. 文件上传操作
    • 3. 搜索框交互
    • 4. 图片批量下载
    • 5. 分页数据抓取
    • 6. 商品信息抓取

1. 环境配置与浏览器启动

首先需要配置 Selenium 环境并启动浏览器。以下是使用 Microsoft Edge 浏览器的基本设置:

importos.pathimporttimeimportrequestsfromseleniumimportwebdriverfromselenium.webdriver.edge.optionsimportOptionsfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.common.byimportBy edge_options=Options()edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"driver=webdriver.Edge(options=edge_options)

2. 文件上传操作

Selenium 可以模拟用户上传文件的操作。以下代码展示了如何通过文件输入框上传本地图片:

driver.get("https://graph.baidu.com/pcpage/index?tpl_from=pc")input_element=driver.find_element(by=By.NAME,value="file")input_element.send_keys(r"D:\Code\PythonTest\Picture1\1.jpg")time.sleep(5)element=driver.find_element(by=By.CLASS_NAME,value="graph-guess-word")print(element.text)

分析

  • send_keys()方法用来向文件输入框传递本地文件路径

3. 搜索框交互

自动化搜索是常见的 Web 交互场景。以下示例展示了如何在 B 站搜索内容:

driver.get('http://www.bilibili.com')driver.find_element(by=By.TAG_NAME,value="input").send_keys("python"+Keys.RETURN)time.sleep(5)

分析

  • 使用By.TAG_NAME定位器找到第一个<input>元素
  • send_keys()方法不仅发送文本,还可以发送特殊按键
  • Keys.RETURN模拟回车键,提交搜索表单

4. 图片批量下载

自动化下载网页图片是数据抓取的常见需求。以下代码展示了如何从百度图片批量下载图片:

ifnotos.path.exists("./Picture2"):os.mkdir("./Picture2")driver.get('https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=迪丽热巴')driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(8)img_list=driver.find_elements(By.XPATH,value="//img[@class='img_7rRSL']")i=1forimginimg_list:img_url=img.get_attribute("src")img_data=requests.get(img_url)withopen(f"./Picture2/{i}.png",'wb')asf:f.write(img_data.content)i+=1

分析

  • driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")使用 JavaScript 执行器滚动页面到底部

  • document.body.scrollHeight获取文档总高度,确保滚动到底部

5. 分页数据抓取

处理分页内容是 Web 抓取中的常见操作。以下代码展示了如何抓取苏宁易购的商品评价:

driver.get("https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166")hp_file=open('好评1.txt','w',encoding="utf-8")defget_py_content(file):pj_elements_content=driver.find_elements(by=By.CLASS_NAME,value="body-content")forelementinpj_elements_content:file.write(element.text+"\n")get_py_content(hp_file)next_elements=driver.find_elements(by=By.XPATH,value='//*[@class="next rv-maidian "]')print(next_elements)whilenext_elements!=[]:next_elements=next_elements[0]time.sleep(1)next_elements.click()get_py_content(hp_file)next_elements=driver.find_elements(by=By.XPATH,value='//*[@class="next rv-maidian "]')hp_file.close()

关键方法分析

  • 使用 XPath 定位器精确查找下一页按钮://*[@class="next rv-maidian "]
  • find_elements()(复数)返回元素列表,即使没有找到元素也不会抛出异常
  • next_elements[0].click()点击第一个符合条件的元素
  • 循环条件next_elements != []检查是否还有下一页

6. 商品信息抓取

综合示例-抓取苏宁易购上医用口罩的商品信息:

edge_options=Options()edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"driver=webdriver.Edge(options=edge_options)driver.get("http://www.suning.com")element=driver.find_element(by=By.ID,value="searchKeywords")element.send_keys("医用口罩"+Keys.RETURN)time.sleep(10)driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")time.sleep(10)price_elements=driver.find_elements(by=By.CLASS_NAME,value='def-price')title_elements=driver.find_elements(by=By.CLASS_NAME,value='title-selling-point')evaluate_elements=driver.find_elements(by=By.CLASS_NAME,value='info-evaluate')store_elements=driver.find_elements(by=By.CLASS_NAME,value='store-stock')a=time.strftime('%Y-%m-%d')f=open(a+'医用口罩.txt','w',encoding='utf-8')foriinrange(len(price_elements)):f.write(price_elements[i].text+'\t')f.write(title_elements[i].text+'\t')f.write(evaluate_elements[i].text+'\t')f.write(store_elements[i].text+'\n')f.close()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/8 2:16:35

zotero-gpt终极指南:AI驱动的文献智能筛选革命

zotero-gpt终极指南&#xff1a;AI驱动的文献智能筛选革命 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 还在为海量文献筛选而烦恼吗&#xff1f;面对日益增长的学术论文&#xff0c;如何快速找到真正有价值的…

作者头像 李华
网站建设 2026/2/5 17:04:22

VUE3:深入浅出defineProps 的 default 写法差异

为什么有不同的写法&#xff1f;这是 Vue 的设计约定&#xff1a;基本类型&#xff08;String, Number, Boolean&#xff09;&#xff1a;直接写默认值引用类型&#xff08;Object, Array, Function&#xff09;&#xff1a;必须用工厂函数返回默认值为什么引用类型要用函数&am…

作者头像 李华
网站建设 2026/2/12 18:46:27

Winston Strawn与Taylor Wessing UK拟合并,携手打造顶级跨大西洋律师事务所

Winston Taylor将秉承共同的愿景与文化&#xff0c;携手打造在重大诉讼、关键交易、战略性知识产权及私人财富领域具备全球影响力的跨大西洋法律服务平台 Winston & Strawn与Taylor Wessing旗下以英国为主导的业务今日宣布&#xff0c;双方拟推进合并&#xff0c;并将以全新…

作者头像 李华
网站建设 2026/2/7 22:36:38

5分钟快速上手:Vue.js年会抽奖系统终极指南

5分钟快速上手&#xff1a;Vue.js年会抽奖系统终极指南 【免费下载链接】lucky-draw 年会抽奖程序 项目地址: https://gitcode.com/gh_mirrors/lu/lucky-draw 还在为年会抽奖程序发愁吗&#xff1f;这款基于Vue.js的抽奖应用可能是你需要的完美解决方案。无需复杂后端部…

作者头像 李华
网站建设 2026/2/7 21:41:55

付费墙绕过技术终极指南:5个步骤轻松访问付费内容

在当前信息爆炸的时代&#xff0c;如何高效获取优质内容成为每个用户面临的挑战。Bypass Paywalls Clean作为一款创新的内容访问工具&#xff0c;为用户提供了突破付费限制的智能解决方案&#xff0c;让信息获取更加便捷高效。 【免费下载链接】bypass-paywalls-chrome-clean …

作者头像 李华