Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python如何获取动态页面数据

python如何获取动态页面数据

原创
作者头像
小白学大数据
发布于 2023-06-05 08:27:17
发布于 2023-06-05 08:27:17
1.1K00
代码可运行
举报
文章被收录于专栏:python进阶学习python进阶学习
运行总次数:0
代码可运行

在日常使用python爬取数据的时候会遇到一些动态页面,有些网页的HTML代码是由javascript动态生成的,直接爬取可能会出现无法加载的情况,需要用phantomJS和selenium模拟浏览器,之后再爬取。

Selenium相当于是一个机器人。可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。

有时候窗口中有很多子tab页面,这些都是需要进行切换的。selenium提供了一个叫做switch_to_window来进行切换,具体切换到哪个页面,可以从driver.window_handles中找到。示例代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 打开一个新的页面
self.driver.execute_script("window.open('"+url+"')")
# 切换到这个新的页面中
self.driver.switch_to_window(self.driver.window_handles[1])

很多网站都设置有相应的反爬机制应对爬虫,比如有时候频繁爬取一些网页,服务器发现你是爬虫后会封掉你的ip地址。这时候我们可以通过设置爬虫代理进行应对,不同的网站对IP的要求也有差别,一般比较有价值的网站都是需要高匿优质代理IP才能增加爬取的成功率,但是代理IP在不同Selenium浏览器有不同的实现方式。这里我们就以Chrome浏览器为例来讲解代理的实现过程,代理选用亿牛云提供的隧道加强版,代码参考示例也有亿牛云提供,需要其他语言示例需求的可以去官网咨询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    from selenium import webdriver
    import string
    import zipfile

    # 代理服务器(产品官网 www.16yun.cn)
    proxyHost = "t.16yun.cn"
    proxyPort = "3111"

    # 代理验证信息
    proxyUser = "username"
    proxyPass = "password"


    def create_proxy_auth_extension(proxy_host, proxy_port,
                                    proxy_username, proxy_password,
                                    scheme='http', plugin_path=None):
        if plugin_path is None:
            plugin_path = r'/tmp/{}_{}@t.16yun.zip'.format(proxy_username, proxy_password)

        manifest_json = """
        {
            "version": "1.0.0",
            "manifest_version": 2,
            "name": "16YUN Proxy",
            "permissions": [
                "proxy",
                "tabs",
                "unlimitedStorage",
                "storage",
                "<all_urls>",
                "webRequest",
                "webRequestBlocking"
            ],
            "background": {
                "scripts": ["background.js"]
            },
            "minimum_chrome_version":"22.0.0"
        }
        """

        background_js = string.Template(
            """
            var config = {
                mode: "fixed_servers",
                rules: {
                    singleProxy: {
                        scheme: "${scheme}",
                        host: "${host}",
                        port: parseInt(${port})
                    },
                    bypassList: ["localhost"]
                }
              };

            chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

            function callbackFn(details) {
                return {
                    authCredentials: {
                        username: "${username}",
                        password: "${password}"
                    }
                };
            }

            chrome.webRequest.onAuthRequired.addListener(
                callbackFn,
                {urls: ["<all_urls>"]},
                ['blocking']
            );
            """
        ).substitute(
            host=proxy_host,
            port=proxy_port,
            username=proxy_username,
            password=proxy_password,
            scheme=scheme,
        )
        print(background_js)

        with zipfile.ZipFile(plugin_path, 'w') as zp:
            zp.writestr("manifest.json", manifest_json)
            zp.writestr("background.js", background_js)

        return plugin_path


    proxy_auth_plugin_path = create_proxy_auth_extension(
        proxy_host=proxyHost,
        proxy_port=proxyPort,
        proxy_username=proxyUser,
        proxy_password=proxyPass)

    option = webdriver.ChromeOptions()

    option.add_argument("--start-maximized")

    # 如报错 chrome-extensions
    # option.add_argument("--disable-extensions")

    option.add_extension(proxy_auth_plugin_path)

    # 关闭webdriver的一些标志
    # option.add_experimental_option('excludeSwitches', ['enable-automation'])

    driver = webdriver.Chrome(
        chrome_options=option,
        executable_path="./chromdriver"
    )

    # 修改webdriver get属性
    # script = '''
    # Object.defineProperty(navigator, 'webdriver', {
    # get: () => undefined
    # })
    # '''
    # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script})


    driver.get("https://httpbin.org/ip")

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python爬虫-selenium
对于python爬虫的相关知识之前分享了很多,这回来说说如何利用selenium自动化获取网页信息。通常对于异步加载的网页,我们需要查找网页的真正请求,并且去构造请求参数,最后才能得到真正的请求网址。而利用selenium通过模拟浏览器操作,则无需去考虑那么多,做到可见即可爬。当然带来便捷的同时,也有着不利,比如说时间上会有所增加,效率降低。可是对于业余爬虫而言,更快的爬取,并不是那么的重要。
小白学大数据
2023/05/12
6810
selenium+chrome不关闭浏览器的情况下如何换IP?
Selenium是一种用于自动化浏览器的工具,可以用于模拟用户行为,特别是在访问需要进行登录的网站的时候,直接可以使用Selenium和HTTP代理来模拟真实用户行为,绕过网站反爬虫机制,以及保护我们的隐私。那如何在Selenium中使用代理并访问目标网站,一般Selenium都是使用ChromeDriver来控制浏览器。
小白学大数据
2023/03/16
1.9K1
python爬虫中“动态网页”如何爬取
经常会在一些爬虫群里面看到这样的提问,为什么用Python爬虫请求某个网页时,有时打印的数据不全或者什么数据都没有或者只有html骨架代码。这是因为涉及到了”动态网页数据“这个词了,简单而言,就是后台的数据不是请求网页链接时就已经将数据写入到相应的标签上了,而是利用ajax请求将后台的数据写入到相应的标签上。通常要得到这些数据,可以有两种方式,其一为找到这个ajax请求链接,然后访问这个链接,解析相应的json数据即可;另外一种是使用selenium访问这个网址,等待网页加载完之后,然后解析相应的html标签得到这些数据。
小白学大数据
2023/06/27
7320
Selenium使用代理出现弹窗验证如何处理
部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定的数据采集。以python的demo为例:
小白学大数据
2024/06/08
2120
如何避免Selenium爬虫被网站识破
在对一些需要进行登陆操作的网站爬取时,通常都会使用到Selenium。但是Selenium爬虫在爬取数据时也是会被网站检测到,这是因为Selenium模拟了浏览器行为,而相对于真实用户的浏览器,Selenium模拟无法识别JavaScript代码和CSS文件。此外,网站也可能通过检测请求头、IP地址、Cookie等信息来判断是否是爬虫。
小白学大数据
2023/05/31
1.6K0
爬虫中无头浏览器如何选择
我们日常使用浏览器的步骤为:启动浏览器、打开一个网页、进行交互。而无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。主要是用作爬虫,用以捕捉Web上的各类数据;这里的无头主要是指没有界面,完全是后台操作。它就是一个真实的浏览器。只是这个浏览器是无界面的。 在爬虫中使用无头浏览器有很多的注意事项,比如我们的业务场景是否适合使用无头浏览器、我们可以通过这些方面进行判别,如果目标网站反爬不是很难,可以直接通过简单的http请求进行采集,不适合使用无头浏览器方案。反之如果网站有多种验证机制,例如需要验证登录、js反爬策略,如果研发不能进行网站行为分析的情况下,建议使用无头浏览器伪装正常用户,并且需要搭配代理一起使用,代理建议使用像亿牛云提供的爬虫代理去访问网站效果会更好,这里简单的示例下使用代理的方式:
小白学大数据
2024/06/08
2020
高温导致大闸蟹价格暴涨
金秋临近,一年之中品尝螃蟹的好季节即将到来。但由于天气炎热,近期大闸蟹“食欲不振”,生长也受到了影响。然而,影响更深的是,由于高温,缺氧的大闸蟹“死伤严重”大闸蟹减产也导致其价格激增,今年大闸蟹价格比去年同期涨40%。大闸蟹一直都以来都比较贵,现在更是涨价,那估计很多人会被价格劝退吧?
小白学大数据
2022/08/31
5650
Selenium爬虫过程中遇到弹窗验证
我们在做爬虫的时候,会遇到一些商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如 Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定的数据采集。以python的demo为例:
小白学大数据
2023/04/28
4350
优化疫情防控政策下,“四类药”成为热销
近日,多地优化疫情防控政策,居民通过互联网平台或药房购买退热、止咳、抗病毒、抗生素等“四类药”,不再查验核酸检测阴性证明,不再需要实名登记信息。成都、广州、北京、重庆等地也宣布不再按行政区域开展全员核酸检测,并鼓励家庭自备抗原试剂盒。在防疫政策优化调整的背景下,从“四类药”原料药到成品再到下游零售连锁药房,所涉及的上市公司都开启了“备货”模式。此外,各家连锁药房上市公司负责人均表示,目前新冠抗原检测试剂盒需求较大,正与供应商积极沟通加紧后备货源的补给。
小白学大数据
2022/12/06
3610
Linux中Chrome无界模式动态代理IP的配置(Selenium)
Python 爬虫设置代理的方式有很多, 比如给urlib、request、selenium等方式设置代理,这部分的细节代码在网上一搜一大堆。那么问题来了,比如你要抓取淘宝或模拟验证码操作登录,是不是要采用这种方式(Selenium + Chromedriver + Chrome)实现呢?
蒋老湿
2020/06/28
4.2K0
Linux中Chrome无界模式动态代理IP的配置(Selenium)
Python自动化测试Selenium+chrome连接HTTP代理(账密+白名单)
Selenium 有很多功能, 但其核心是 web 浏览器自动化的一个工具集,它允许用户模拟终端用户执行的常见活动;将文本输入到字段中,选择下拉值和复选框,并单击文档中的链接。 它还提供许多其他控件,比如鼠标移动、任意 JavaScript 执行等等。
阿秋数据采集
2022/12/16
1.1K0
深度解析:使用ChromeDriver和webdriver_manager实现无头浏览器爬虫
在现代网络爬虫的实践中,动态网页的内容加载和复杂的反爬虫机制使得数据采集变得愈发困难。传统的静态网页爬取方法已无法满足需求,尤其是在需要模拟用户行为、处理JavaScript渲染的场景下。为此,采用无头浏览器(Headless Browser)技术成为一种有效的解决方案。
jackcode
2025/02/10
3050
深度解析:使用ChromeDriver和webdriver_manager实现无头浏览器爬虫
[1296]selenium配置带用户名和密码的隧道代理
参考:https://blog.csdn.net/crayonjingjing/article/details/137596882 https://segmentfault.com/q/1010000043258582
周小董
2024/11/24
2890
Python调用ip代理案例,快代理api调用demo
Python调用ip代理案例,demo,参考官方给出的案例,整理,这里使用的是快代理api,可以实现ip代理的更换,主要整理了requests的调用以及无头浏览器 Chrome的使用,同时使用了站长之家ip检测的api工具!
二爷
2020/10/19
2.3K0
Python调用ip代理案例,快代理api调用demo
Selenium 如何使用代理 IP 进行 Web 爬虫(无认证实现、有账号密码认证实现)
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/01/02
4.5K0
Selenium 如何使用代理 IP 进行 Web 爬虫(无认证实现、有账号密码认证实现)
Selenium + Chrome Diver密码认证的HTTP代理
默认情况下,Chrome的–proxy-server=”http://ip:port”参数不支持设置用户名和密码认证。这样就使得”Selenium + Chrome Driver”无法使用HTTP Basic Authentication的HTTP代理。一种变通的方式就是采用IP地址认证,但在国内网络环境下,大多数用户都采用ADSL形式网络接入,IP是变化的,也无法采用IP地址绑定认证。因此迫切需要找到一种让Chrome自动实现HTTP代理用户名密码认证的方案。
周小董
2019/03/25
2.7K0
python selenium chrome使用验证代理
failed to wait for extension background page to load: chrome-extension://oonccdcfgindlahlpdgfkafbecgknmkg/_generated_background_page.html
py3study
2020/01/20
1.5K0
selenium配置有账号密码验证的代理
一.准备文件 1.background.js var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "mimvp_proxy_host", port: parseInt(mimvp_proxy_port) }, bypassList: ["mimvp.com"] } }; chrom
小小咸鱼YwY
2020/11/13
2K0
Scrapy+Chromium+代理+
js是爬虫中毕竟麻烦处理的一块。通常的解决办法是通过抓包,然后查看request信息,接着捕获ajax返回的消息。 但是,如果遇到一些js渲染特别复杂的情况,这种办法就非常非常的麻烦。所以我们采用了selenium这个包,用它来调用chromium完成js渲染的问题。
py3study
2020/01/02
1.1K0
Roxlabs:解锁高效数据采集与网络应用新境界
Roxlabs都能提供符合高标准的解决方案,助力企业和个人用户在数字化时代里畅游无界。
Yan-英杰
2024/02/01
2690
Roxlabs:解锁高效数据采集与网络应用新境界
推荐阅读
相关推荐
Python爬虫-selenium
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验