发布:2023/12/21 23:54:24作者:管理员 来源:本站 浏览次数:662
准备
1.安装selenium模块
pip3 install selenium
2.装好浏览器,例如Chrome;
3.下载webdriver驱动,例如chromedriver,国内淘宝镜像参考这里。注意驱动与浏览器版本要适配!!!
4.然后把下载好的驱动放到python安装路径下的scripts文件里。
开启窗口
因为涉及大量的网页元素,需要了解HTML的一些基础知识,推荐菜鸟教程。
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome() # 开启一个Chrome窗口
driver.maximize_window() # 最大化窗口,充分展示元素控件
驱动不适配或则找不到应存放驱动的路径,可以尝试以下方法或者更换浏览器版本。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
以上代码执行时,会同时打开一个Chrome浏览器窗口,自动进行之后的操作。
打开网页
建议打开Chrome的开发者工具,通过右键选中元素打开检查,可以快速查看元素在源码中相应块,便于查找元素的id、class、name之类的属性。
# 通过get打开baidu
driver.get("http://www.baidu.com")
# 通过网页元素id找到相应的对象,并输入内容
driver.find_element(by=By.ID,value="kw").send_keys('python selenium')
# 沉默5s,太快会被识别为机器
sleep(5)
# 点击搜索按钮
driver.find_element(by=By.ID,value="su").click()
取数
打开搜索结果中的一个链接,需要了解css_selector或XPATH语法,示例采用css_selector。关于元素定位的问题,可以在开发者工具里,打开搜索框,测试css_selector或XPATH路径是否定位准确。
sleep(2) # 等加载好
driver.find_element(by=By.CSS_SELECTOR,value='div#content_left div.result.c-container:nth-child(5) a').click()
打开新浏览器标签后切换过去,根据元素定位,获取需要的数据。
win_1=driver.window_handles # 全部窗口句柄
driver.switch_to.window(win_1[-1]) # 切换到最新的窗口
data_1=[ ]
# 获取标题
data_1.append(driver.find_element(by=By.CSS_SELECTOR,value='div[class*="index-module_articleTitle"]').text)
# 获取作者名
data_1.append(driver.find_element(by=By.CSS_SELECTOR,value='p[class*="index-module_authorName"]').text)
# 获取时间
data_1.append(driver.find_element(by=By.CSS_SELECTOR,value='span[class*="index-module_time"]').text)
# 获取文章内容
data_1.append(driver.find_element(by=By.CSS_SELECTOR,value='div[class*="index-module_articleWrap"]').text)
text方法获取内容简单粗暴,有更加精细化的需求,可以采用BeautifulSoup,对源码进行操作,分层获取数据,也意味着花更多的时间。
from bs4 import BeautifulSoup
text = driver.find_element(by=By.CSS_SELECTOR, value= 'div[class*="index-module_articleWrap"]').get_attribute("innerHTML")
text = BeautifulSoup(text, "html.parser")
有时候有些网页采用iframe结构,可能会出现网页元素明明在源码中可以看见,却找不到的情况,这时除了排查XPATH或者css_selector语法问题,也可能是因为在不同的iframe上,可以尝试切换frame,进入到相应的frame中再进行操作。
driver.switch_to.frame(1) # 可以通过索引、id、名字来切换
driver.switch_to.default_content() # 切换到原来默认的frame
导数
# 存到text文件里
with open( 'test.text', 'w', encoding="utf-8") as f:
for i in data_1:
f.writelines(i)
f.writelines('\n')
# 关掉浏览器
driver.quit()
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4