使用Selenium和Firefox无界面模式后台爬取新浪新闻“疫情”实时数据以及制作docker镜像
为了实时获取新浪新闻网页的实时数据,采用selenium爬虫方法;为了在没有图形界面系统而无法弹窗如服务器上运行,可以使用firefox或chrome的headless模式,而PhantomJS已经不被selenium支持了。直接上代码:#!/usr/bin/env pythonimport timefrom selenium import web-driverfrom selenium.webd
为了实时获取新浪新闻网页的实时数据,采用selenium爬虫方法;为了在没有图形界面系统而无法弹窗如服务器上运行,可以使用firefox或chrome的headless模式,而PhantomJS已经不被selenium支持了。
直接上代码:
#!/usr/bin/env python
import time
from selenium import web-driver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(executable_path='./geckodriver', options=options) # executable_path须是geckodriver二进制文件的实际位置
driver.get("https://news.sina.cn/zt_d/yiqing0121")
time.sleep(1)
print(driver.find_element_by_xpath('//div[@class="t_tit"]').text)
e_item = driver.find_elements_by_xpath('//div[@class="t_item"]')
for e in e_item:
print(e.find_element_by_tag_name('h5').text + ":" + e.find_element_by_tag_name('b').text + " 较昨日:" + e.find_element_by_tag_name('code').text)
driver.quit()
以上是一次性抓取网页上“确诊“、”疑似“、”死亡“、”治愈“以及分别与昨日比较”的8项数据和截止日期标题。
当然,可以基于以上代码使用计划任务或改造成一个无限循环等方式实时抓取数据,这里就自行改造吧,不举例了。
既然有了浏览器的无界面模式,不用像很久以前使用selenium需依赖图形界面系统,就可以制作docker镜像,方便在不同平台(win/linux/mac/……)上移植了。
docker镜像制作
1、拉取基础镜像,这里使用centos系统镜像
docker pull centos #会拉取当前最新镜像,目前是centos8操作系统
2、启动一个容器
docker run -dit centos:latest
3、进入容器
docker exec -it 容器id bash
容器中:
4、安装python和pip
yum install python3-pip
5、安装selenium
pip3 install selenium
6、安装火狐浏览器
yum install firefox
7、安装selenium的火狐浏览器驱动(也可以从别的地方下载,然后拷贝到容器里)
yum install git
git clone https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
tar -xvf geckodriver-v0.26.0-linux64.tar.gz
会得到geckodriver这个二进制文件,即直接使用这个文件
环境搭好后,就可以测试selenium了,可以使用上面的脚本测试,注意geckodriver的实际位置。
测试没有问题,将此容器做成新的镜像:
docker commit -m "selenium,centos8,firefox" -a "trf" 容器id selenium-centos:latest
-m 备注,-a 作者,镜像名称可以自定义
这样,在新的镜像生成的容器中就可以使用selenium和firefox的无界面模式(当然也可以做selenium和chrome的环境镜像)了。
而且,也可以利用这个新镜像作为基础镜像,使用dockerfile等制作自己程序需要的镜像。
更多推荐
所有评论(0)