1. 概述
基于Python, Selenium, Chrome headless (无头浏览器) 访问页面, 并将内容保存到本地文件.
初步干了一次爬数据的工作,写一写入门的心得.分享一下,不足之处未来逐步完善.
2. 环境准备
Python 3.6.5
注:这个附带的工具 IDLE (Python 3.6 64-bit) 调试很方便.按F5就行了
Selenium 2.0
注: 需要带 WebDriver
Chrome 59以上版本可以运行Headless模式
3. 代码实例
主要功能与步骤
1) 使用chrome headless 模式打开页面
2) 根据页面标签,利用Selenium 定位需要查找和分析页面相关内容
3) 将有用的功能,写入指定文件
废话不多直接上代码
# 引入休眠等待库
import time
# 引入selenium的浏览器驱动接口
from selenium import webdriver
# 引入chrome选项
from selenium.webdriver.chrome.options import Options
# 配置chrome浏览器(无头模式)
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=chrome_options)
# 没有写错,就是要页面够长.不然页面内容会点不到 (第一个坑)
driver.set_window_size(1024, 7680)
# 加载页面
driver.get("https://www.example.com")
# 这里进行嵌套,模拟点击打开详细页,可以抓取详细内容
for i in range(1,21):
# 根据css中的class查找对应的element 集合
counts = len(driver.find_elements_by_css_selector(".item_con_list .position_link"))
print ("第" + str(i) + "页,本页共有:" + str(counts) + "条记录")
for j in range(counts):
# 新开一个窗口
url = driver.find_elements_by_css_selector(".item_con_list .position_link")[j]
print(' 跳转第' + str(j) + "条:" + url.get_attribute("href"))
url.click()
time.sleep(1)
# 获取当前窗口句柄集合
handles = driver.window_handles
# 切换窗口
for handle in handles:
if handle!=driver.current_window_handle:
driver.switch_to_window(handle)
# 找到内容
try:
data = driver.find_element_by_class_name("job_bt").text
except:
print("这个页面没拿到内容")
driver.save_screenshot(i+str(j)+".png")
# 写入内容 ,要保持编码一致,不然会出现保存出错 (第二个坑)
fileObject = open('example.txt', 'a', encoding='utf-8')
fileObject.write(data)
fileObject.write('\n')
fileObject.close()
break
#关闭当前窗口
driver.close()
#切换(主)窗口
driver.switch_to_window(handles[0])
time.sleep(1)
#生成当前页面快照,调试用的
driver.save_screenshot("current.png")
# 跳转到下一页
driver.find_element_by_class_name("pager_next").click()
print("跳转到下一页")
time.sleep(5)
# 关闭浏览器
driver.quit()
网友评论