爬取多个动态加载页面的代码-实例

使用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')

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值