国家家养动物种质资源库(CDAD)数据爬取不到?一文解决

最近需要爬取国家家养动物种质资源库里的部分畜禽遗传资源,但爬页面数据一直都只能爬到无关痛痒的标题什么的,真正重要的数据却一直都获取不到。在我的观察之下,这些数据在点开网页“检查”的Elements后是可以显示的,但却不存在于网页源代码里,这是为什么呢?

原来,现在很多网站都采用了动态加载技术,即在页面加载完成后,通过 JavaScript 在页面上添加或修改内容,这些动态加载的内容(可能包括异步加载的数据、通过 AJAX 请求获取的数据等)不会在初始的 HTML 源代码中出现,因此无法直接通过爬虫获取到。要获取这些数据,需要使用能够执行 JavaScript 的工具如Selenium。

当我加入了Selenium模块后,数据就可以如愿加载到啦!代码如下:

# 爬取国家家养动物种质资源库下畜禽遗传资源[山羊]的全部信息

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep

if __name__ == "__main__":   
    # 实例化一个浏览器对象(传入浏览器的驱动程序)
    service = Service(executable_path='./chromedriver.exe')
    bro = webdriver.Chrome(service=service)

    # 让浏览器发起对CDAD的访问请求
    bro.get(url='https://www.cdad-is.org.cn/admin/Zylist/index?type=cngenetics1&subtype=11')

    # 显式等待页面元素加载完成(最长等待时间设置为10秒),等tbody标签里有“山羊”文本再往后推进
    WebDriverWait(bro, 10).until(EC.text_to_be_present_in_element((By.TAG_NAME, "tbody"), "山羊"))

    # page_source获取浏览器当前页面的页面源码数据
    page_text = bro.page_source

    # 持久化存储
    with open('./test.html', 'w', encoding='utf-8') as fp:
        fp.write(page_text)

    # 让程序暂停执行5秒钟,以确保页面所有内容都已加载完成
    sleep(5)

    # 关闭浏览器,释放资源
    bro.quit()

把test.html在Chrome打开之后是下面这个样子,和原页面几乎没差,就是超链点了之后显示404emmm。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值