赞
踩
-------谢谢您的参考,如有疑问,欢迎交流
前引:
当你需要爬取的页面内容在访问页面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对象访问获取到的页面内容
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。