正常爬取网页不需要有浏览器支持,只要python配置相应的包就行。但是如果想要进行模拟登陆等功能,就需要有浏览器支持了。我采用的是selenium+bs4的模块,浏览器驱动采用的是chrome的webdriver,这个在selenium中有。
from selenium import webdriver
import time
from bs4 import BeautifulSoup
主要爬取过程很简单,这里就是列出几个关键。
首先是配置驱动浏览器
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
#chrome_options.add_argument(r"user-data-dir=/usr/local")
#chrome_options.add_argument("window-size=1024,768")
# 添加沙盒模式
chrome_options.add_argument("--no-sandbox")
browser = webdriver.Chrome(chrome_options=chrome_options)
#这里的driver就是上面配置好的browser浏览器对象,url为自己想访问的网址,这里指向登陆界面,下面是模仿登陆过程。
driver.get(url)
print(driver.current_url)
# 进入登陆页面,输入账户名和密码,find_element_by_xpath用来定位标签,send_keys用来向标签输入内容,click()是点击动作,这是登陆模仿动作的关键步骤。网页内部也是重复这个工程
driver.find_element_by_xpath('/html/body/div/div/form/div[3]/div[2]/input').send_keys(account)
driver.find_element_by_xpath('/html/body/div/div/form/div[4]/div[2]/input').send_keys(password)
# 点击登陆
driver.find_element_by_xpath('/html/body/div/div/form/div[5]/button').click()
#这两步是为了获取cookies,但是我没用到。
driver.refresh()
cookies = driver.get_cookies()
# 等待加载登陆进入管理界面,这个一般都需要等待页面渲染,否则得不到想要的页面,这里是个坑,注意时间掌控,一半1s足以,这里为了保险起见,弄了各5秒。
time.sleep(5)
#这里是为了查看当前浏览器的网页
res = driver.page_source
print(res)
# 点击节点管理进入节点页面
driver.find_element_by_xpath("//body//h3/a").click()
爬取网页很简单就是配置驱动wedriver的docker环境很麻烦。主要是不知道怎么在docker中安装浏览器,参考的几个都是安装失败。结合同事的参考,终于把这个给搞定了,这里mark一下。