千家信息网

Python爬虫实战1-解决需要爬取网页N秒后的内容的需求

发表于:2024-12-05 作者:千家信息网编辑
千家信息网最后更新 2024年12月05日,小生博客:http://xsboke.blog.51cto.com -------谢谢您的参考,如有疑问,欢迎交流前引: 当你需要爬取的页面内容在访
千家信息网最后更新 2024年12月05日Python爬虫实战1-解决需要爬取网页N秒后的内容的需求

小生博客:http://xsboke.blog.51cto.com

                        -------谢谢您的参考,如有疑问,欢迎交流

前引:

    当你需要爬取的页面内容在访问页面5秒后才会出现,    这时使用python的requests模块就很难爬取到你想要的内容了.    requests和selenium的不同:        requests是通过模拟http请求来实现浏览网页的        selenuim是通过浏览器的API实现控制浏览器,从而达到浏览器自动化    上面说了,selenium是通过控制浏览器实现访问的,但是linux的命令行是不能打开浏览器的,    幸运的是Chrome和Firefox有一个特殊的功能headless(无头)模式.(就是wujie面模式)    通过headless模式可以实现在linux命令行控制浏览器。    接下来要实现的就是在linux命令行界面通过Chrome的headless模式,实现获取访问网页5秒后的内容

一. 环境准备

    1. 安装谷歌浏览器linux版及其依赖包.        [root@localhost ~]# wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm        [root@localhost ~]# yum localinstall google-chrome-stable_current_x86_64.rpm --nogpgcheck    2. 下载selenium连接chrome的驱动程序(要下载和chrome对应的版本).        [root@localhost ~]# google-chrome --version        Google Chrome 72.0.3626.109         [root@localhost ~]# https://chromedriver.storage.googleapis.com/72.0.3626.69/chromedriver_linux64.zip        [root@localhost ~]# unzip chromedriver_linux64.zip        [root@localhost ~]# chmod +x chromedrive    3.  安装python需要模块        # beautifulsoup4是一个html,xml解析器        [root@localhost ~]# pip install beautifulsoup4 selenium

二. 开始实现获取网页5秒后的数据

#!/usr/bin/env python#-*- coding:utf-8 -*-import timefrom bs4 import BeautifulSoupfrom selenium import webdriveropt = webdriver.ChromeOptions()          # 创建chrome对象opt.add_argument('--no-sandbox')          # 启用非沙盒模式,linux必填,否则会报错:(unknown error: DevToolsActivePort file doesn't exist)......opt.add_argument('--disable-gpu')          # 禁用gpu,linux部署需填,防止未知bugopt.add_argument('headless')          # 把chrome设置成wujie面模式,不论windows还是linux都可以,自动适配对应参数driver = webdriver.Chrome(executable_path=r'/root/chromedriver',options=opt)    # 指定chrome驱动程序位置和chrome选项driver.get('https://baidu.com')          # 访问网页time.sleep(5)           # 等待5秒content = driver.page_source          # 获取5秒后的页面soup = BeautifulSoup(content,features='html.parser')    # 将获取到的内容转换成BeautifulSoup对象driver.close()print(soup.body.get_text())          # 通过BeautifulSoup对象访问获取到的页面内容
0