使用Python、Selenium、chromedriver爬取内容
简单地实现,代码不规范
第二版改动代码
改进:不用sleep,找不到就一直循环,再次优化耗时
# 为了不浪费时间,持续循环寻找元素
while (find == 0):
try:
# 找元素
result = browser.find_element_by_class_name("XXXX").text
# 避免找到空内容
if(len(result)>3):
find = 1
else:
continue
except Exception as e:
continue
find = 0
# 为了避免内容未加载完,小睡一会
# time.sleep(0.15)
第一版完整代码
注:原来使用的是3.8.5 32位Python,现使用3.9.1 64位,可以忽略错误代码。
import time
import traceback
from selenium import webdriver
# 初始化
xxList = ['网站地址的不同部分']
i = 0
Alltime = 0
averageTime = 0
find = 0
# 时间
myTime = time.strftime("%Y-%m-%d", time.localtime())
# 打开文件
txt = open('文件路径' + myTime + '.txt', mode='w', encoding='utf-8')
txt.write('……' + myTime + '\n\n')
# 引入chromedriver.exe,以及没什么用的忽略错误代码
chromedriver = "chromedriver.exe在本电脑的路径"
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors-spki-list')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
# 无浏览器界面代码
options.add_argument('--headless')
# 不加载图片
prefs = {"profile.managed_default_content_settings.images": 2}
options.add_experimental_option("prefs", prefs)
# 创建浏览器
browser = webdriver.Chrome(
chromedriver,chrome_options=options)
# 设置窗口大小
browser.set_window_size(1920, 1080)
for type in xxList:
timeStart = time.perf_counter()
# 循环网页
url = "网站地址"+type+"网站地址"
browser.get(url)
# 为了不浪费sleep时间,持续循环寻找元素,否则按网上大多数的代码,要直接sleep(1)
while (find == 0):
# 找元素
try:
browser.find_element_by_class_name("XXXX")
find = 1
# 找不到继续,忽略报错
except Exception as e:
continue
find = 0
# 为了避免内容未加载完,小睡一会
time.sleep(0.15)
# 写入信息
result = browser.find_element_by_class_name("XXXX").text
txt.write(type.upper() + '\t' + result + "\n")
i = i + 1
if (i % 4 == 0):
txt.write('\n')
# 耗时计算
timeSlice = time.perf_counter() - timeStart
Alltime = Alltime + timeSlice
# 完成提示
print('\n↓↓↓\nResult: '+result)
print('No.' + str(i) + ', ' + type.upper() +
', finished in ' + str(timeSlice) + 's.\n')
# 关闭
browser.close()
txt.close()
# 耗时计算
averageTime = Alltime / 16
print('All finished in ' + str(Alltime) + 's.')
print('Average time: ' + str(averageTime) + 's.\n')