整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

想获取JS加载网页的源网页的源码,不想获取JS加载后的数据

家好,我是Python进阶者。

一、前言

前几天在Python钻石交流群【梦】问了一个Python网络爬虫的问题,这个网站不知道使用了什么反爬手段,都获取不到页面数据。原来的那篇文章竟然爆文了,突破了1.5w的阅读量,欢迎大家围观。

不过这里粉丝的需求有点奇怪,他不需要JS加载后的数据页面,而是需要JS的源网页。昨天在群里又讨论起这个问题,这次一起来看看这个问题。

二、实现过程

这里【瑜亮老师】指出异步页面中,标签和数据都是不在页面源码中的。你的这个页面,数据在json,然后js拼装后显示在页面中。如果你想要获取你说的带标签的源码,可以使用自动化模块,例如:selenium(不建议用这个),playwright,drissionpage。

后来【提请问粘给图截报错贴代源码】给出了具体的源码:

from DrissionPage import WebPage

page = WebPage()
# 访问网页并渲染
page.get('https://fx.cmbchina.com/hq', timeout=300)
response = page.html
print(response)
page.quit()

打开network,查看这个网页的渲染方式,你就知道这个网页一开始是没有内容的,全靠js在渲染。

你直接访问这个链接就是没有内容。

先渲染再获取就有了,再者说,你的目的肯定是只要这页面上的表格,表格就是json,获取json链接比获取渲染后的网页方便多了。可以不在页面本身的,使用dom插入,现在的数据页面基本都是这种方式,效率高且安全性好。

【猫药师Kelly】也指出使用drissionpage,配合自带的监听或者mitmproxy,能搞定很多活。

顺利地解决了粉丝的问题。

如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是Python进阶者。这篇文章主要盘点了一个Python网络爬虫网页JS渲染源网页源码获取的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【梦】提出的问题,感谢【论草莓如何成为冻干莓】、【瑜亮老师】、【猫药师Kelly】给出的思路,感谢【莫生气】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

家好,我是Python进阶者。

前言

前几天雪球兄在Python交流群里分享了一个获取B站视频选集的Python代码,小编觉得非常奈斯,这里整理成一篇小文章,分享给大家学习。

关于雪球兄,大家应该都熟悉了,之前他写过Python实战文章,好评如潮,没来得及看的小伙伴,可以戳这里了:

盘点常用验证码标注和识别项目线上部署三种方式——VUE前端、Java后端和Python后端部署

Python项目实战篇——常用验证码标注&识别(CNN神经网络模型训练/测试/部署)

Python项目实战篇——常用验证码标注&识别(前端+后端实现高效率数据标注)

Python项目实战篇——常用验证码标注&识别(数据采集/预处理/字符图切割)

Python项目实战篇——常用验证码标注和识别(需求分析和实现思路)

之前也有给大家分享B站的一些文章,感兴趣的话可以看看这个文章,Python网络爬虫+数据分析:手把手教你用Python网络爬虫获取B站UP主10万条数据并用Pandas库进行趣味数据分析。


一、背景引入

一提到B站,第一印象就是视频,相信很多小伙伴和我一样,都想着去利用网络爬虫技术获取B站的视频吧,但是B站视频其实没有那么好拿到的,关于B站的视频获取,之前有介绍通过you-get库进行实现,感兴趣的小伙伴可以看这篇文章:You-Get 就是这么强势!。

言归正传,经常在B站上学习的小伙伴们可能经常会遇到有的博主连载几十个,甚至几百个视频,尤其像这种编程语言、课程、工具使用等连续的教程,就会出现选集系列,如下图所示。

当然这些选集的字段我们肉眼也是可以看得到的。只是通过程序来实现的话,可能真没有想象的那么简单。那么这篇文章的目标呢,就是通过Python网络爬虫技术,基于selenium库,实现视频选集的获取。


二、具体实现

这篇文章我们用的库是selenium,这个是一个用于模拟用户登录的库,虽然给人的感觉是慢,但是在网络爬虫领域,这个库还是用的蛮多的,用它来模拟登录、获取数据屡试不爽。下面是实现视频选集采集的所有代码,欢迎大家亲自动手实践。

# coding: utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait


class Item:
    page_num = ""
    part = ""
    duration = ""


    def __init__(self, page_num, part, duration):
        self.page_num = page_num
        self.part = part
        self.duration = duration


    def get_second(self):
        str_list = self.duration.split(":")
        sum = 0
        for i, item in enumerate(str_list):
            sum += pow(60, len(str_list) - i - 1) * int(item)


        return sum


def get_bilili_page_items(url):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')  # 设置无界面
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    # options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2,
    #                                           "profile.managed_default_content_settings.flash": 0})


    browser = webdriver.Chrome(options=options)
    # browser = webdriver.PhantomJS()
    print("正在打开网页...")
    browser.get(url)


    print("等待网页响应...")
    # 需要等一下,直到页面加载完成
    wait = WebDriverWait(browser, 10)
    wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@class="list-box"]/li/a')))


    print("正在获取网页数据...")
    list = browser.find_elements_by_xpath('//*[@class="list-box"]/li')
    # print(list)
    itemList = []


    second_sum = 0


    # 2.循环遍历出每一条搜索结果的标题
    for t in list:
        # print("t text:",t.text)
        element = t.find_element_by_tag_name('a')
        # print("a text:",element.text)
        arr = element.text.split('\n')
        print(" ".join(arr))
        item = Item(arr[0], arr[1], arr[2])
        second_sum += item.get_second()
        itemList.append(item)


    print("总数量:", len(itemList))
    # browser.page_source


    print("总时长/分钟:", round(second_sum / 60, 2))
    print("总时长/小时:", round(second_sum / 3600.0, 2))


    browser.close()


    return itemList




get_bilili_page_items("https://www.bilibili.com/video/BV1Eb411u7Fw")

这里用到的选择器是xpath,利用视频示例是B站的《高等数学》同济版 全程教学视频(宋浩老师)视频选集,大家如果想抓取其他视频选集的话,只需要更改上述代码的最后一行的URL链接即可。


三、常见问题

在运行过程中小伙伴们应该会经常遇到这个问题,如下图所示。

这个是因为谷歌驱动版本问题导致的,只需要根据提示,去下载对应的驱动版本即可,驱动下载链接:

https://chromedriver.storage.googleapis.com/index.html


四、总结

我是Python进阶者。这篇文章主要给大家介绍了B站视频选集内容的获取方法,基于网络爬虫,通过selenium库和xpath选择器进行实现,并且给大家例举了常见问题的处理方法。小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

么是文章采集代码

网页文章采集码,是一款利用独特编程技巧的高效网页采集器。它仅需编写特定指令,便能快速获取互联网上的大量文本与图像资料,犹如人工逐页筛选。此外,该技术在信息检索以及数据分析等领域亦产生了显著影响。

在信息化时代,如何有效地获取有价值的信息成为至关重要的问题。传统的人工检索耗时且效果有限,复制粘贴的方式显然已经无法满足需求。而文章采集代码具有显著提升信息收集效率及准确性的优点,因此已逐渐成为学术研究、数据分析及企业市场推广领域必不可少的工具。

文章采集代码的原理

本程序具有卓越的编写理念,主要包括以下四个核心环节:

关键技术在于软件借助HTTP协议,直接获取指定站点的页面原始数据。

剖析网页源码:对于搜集到的文档,深度解读其中的HTML格式与相关数据结构。

我们已经摒弃了提取出来的信息中无用的部分,包括HTML标识和特殊字符等,以揭示其真正的核心价值。

数据存储策略:经过精细筛选与加工后的数据,将按照秩序存入数据库或档案文件,为将来深入分析以及可视化展出提供支持。

我们来详细研究影响数据精度和完整性的重要因素,包括反爬虫措施的应对,以及解决动态加载等复杂难题的有效方法。只有深入理解原理并结合实践经验做出精准策略调整,才能创建出优质且稳定运行的文章采集软件代码。

常见的文章采集工具

数字化浪潮日益加速,促使众多文本采集工具应运而生,为提升开发者工作效能立下汗马功劳。此篇特推荐几款表现优异且功能强大的中期优秀采集工具以供参考:

强力推荐Beautiful Soup:作为Python编程中杰出的HTML处理利器,助力您迅速提取HTML和XML文档中的关键信息。

Scrapy:这是Python开发的开源网络爬虫框架,其出色的实用性和广泛应用领域彰显了其优异品质。

Selenium:专攻网络应用测试领域,尤为擅长仿真用户操作行为。

根据不同环境合理选用工具,以满足多元化需求;用户需明确自我需求,并在科学评估技术水准的基础上作出适宜选择。

文章采集代码在实际应用中的挑战

尽管文章采集代码具备高效便捷的优点,但在实践操作过程中仍需面临诸多困难。主要挑战包括以下几点:

以应对恶意爬虫为例,为了规避网站遭到非法访问并确保数据安全性,许多网站已实施高效的反爬虫策略。因此,在文章代码编写时,务必避免触发此类防范措施。

如今众多企业均利用JavaScript实现在线实时数据加载,为进一步提高此类网页信息获取效率,推荐采用诸如Selenium等自动化测试工具进行模拟操控。

随着信息和网页编辑形式多样化(例如HTML、JSON、XML等格式),数据处理的复杂性急剧增加。

在众多挑战下,开发者必须深化技能,以探索满足项目个性需求的最优方案。

未来文章采集技术发展趋势

在现今大数据和科技迅猛发展的环境下,文章采编技术正逐步展现出如下关键趋势。

随着AI科技的飞速发展,文章采集工作正逐步运用先进的算法与技术。如面向网页结构解析的机器学习技术,能有效地自动识别并提取关键信息。

多元化趋势日益明显:随着互联网及移动设备的广泛应用,各种视听类媒体呈现出快速创新之势。在未来的信息收集及展示环节中,深度加工及精密分析将倍受关注。

关注隐私保护提高警惕:鉴于当下社会隐私意识不断提升,在收集和利用用户自创内容时,必须坚决尊重其隐私权。

展望未来,文章采集技术将逐步向智能性增强、多元性拓展并注重用户体验与隐私保护的趋势迈进。