python使用selenium框架动态抓取指定内容
Published in:2024-01-25 |
Words: 584 | Reading time: 2min | reading:

技术简介

Selenium是一个用于Web应用程序的自动化测试框架,通过模拟用户在浏览器中的操作,如点击按钮、输入文本等,来执行自动化测试。它支持多种浏览器和操作系统,并且可以通过各种编程语言编写测试脚本。Selenium的主要特点是易于使用、灵活性和稳定性,因此在Web测试领域被广泛使用。

安装使用

安装

  • pip
1
pip install selenium

demo

  • 动态获取内容

demo中的案例通过selenium框架中的 webdriver.Chrome(options=options)方法获取google chrome启动后的驱动,通过操作driver.get(url_detail)方法动态获取当前网页内容,通过 time.sleep(search_delta_time)增加延迟以确保内容加载完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from selenium import webdriver
from selenium.common import NoSuchWindowException
from selenium.webdriver.common.by import By

# 设置代理服务器
proxy = {
"proxyType": "manual",
"httpProxy": "http://" + constants.proxy_server_ip + ":" + str(constants.proxy_server_port), # 代理服务器地址和端口
"ftpProxy": "http://" + constants.proxy_server_ip + ":" + str(constants.proxy_server_port),
"sslProxy": "http://" + constants.proxy_server_ip + ":" + str(constants.proxy_server_port),
"noProxy": "",
"proxyAutoconfigUrl": ""
}

# 创建浏览器驱动程序并设置代理参数
options = webdriver.ChromeOptions()
if proxy_flag == 'True':
options.set_capability("proxy", proxy)
logger.info("current use internal proxy, proxy content: " + str(proxy['httpProxy']))

driver = webdriver.Chrome(options=options)
mode = ''
url = "https://" + visit_url + "/tags/" + key_word + "/artworks?" + mode
while True:
url_detail = url_process_page(url, current_page=cur_page)
logger.info("current use url : " + str(url_detail))
driver.get(url_detail)
# 等待图片加载完成
time.sleep(search_delta_time)
logger.debug("start load href save url to txt.")
load_save_flag = load_href_save(driver, key_word)
if load_save_flag:
# 使用函数
try:
save_img_url(driver, key_word)
cur_page += 1
logger.success("save img all finish,current page: " + str(cur_page))

except NoSuchWindowException as nswe:
logger.warning("chrome force exit! detail:" + str(nswe))

else:
break
# 循环抓取结束 断掉浏览器 重置标志位、
self.success_tips()
constants.spider_image_flag = False
logger.warning("google chrome will exit! ")
driver.quit()
  • 过滤筛选数据

下方代码通过driver.find_elements(By.CSS_SELECTOR, “a”)获取指定html元素值,并存储值列表,后期可对列表数据进行筛选,以此完成目标数据的动态抓取

1
2
3
4
5
6
7
8
9
10
11
12
def load_href_save(driver, key_word):
image_urls_list = []
try:
image_elements = driver.find_elements(By.CSS_SELECTOR, "a")
for image_element in image_elements:
driver.execute_script("return arguments[0].href;", image_element)
image_urls_list.append(image_url)
logger.debug("load href and start save img url: " + image_url)
return True
except Exception as un_e:
logger.error("Error, unknown error, detail:" + str(un_e))
return False
Prev:
spider_image_system_introduction
Next:
Python多脚本的集成化管理(微服务,Nginx)