温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-03-23 14:16:49 来源:网络 阅读:1402 作者:小生博客 栏目:大数据

小生博客: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 time

from bs4 import BeautifulSoup
from selenium import webdriver

opt = webdriver.ChromeOptions()          # 创建chrome对象
opt.add_argument('--no-sandbox')          # 启用非沙盒模式,linux必填,否则会报错:(unknown error: DevToolsActivePort file doesn't exist)......
opt.add_argument('--disable-gpu')          # 禁用gpu,linux部署需填,防止未知bug
opt.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对象访问获取到的页面内容
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI