Python+Selenium模拟人工抓取数据
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
1、安装Python3.5或以上版本
打开https://www.python.org/
Win:根据你的Windows版本(64位还是32位)从Python的官方网站下载Python,运行下载的exe安装包。特别要注意勾上Add Python 3.X to PATH,然后点“Install Now”即可完成安装。
Mac: 系统自带的Python版本是2.X,从Python官网下载Python 3.X的安装程序,下载后双击运行并安装会替换掉2.X;
2、安装selenium
Win:pip install selenium
Mac: pip3 install selenium
3、安装webdriver
推荐Chrome,http://chromedriver.storage.googleapis.com/index.html
webdriver浏览器版本对应
Webdriver版本 支持的Chrome版本 v2.41 v67-69 v2.40 v66-68 v2.39 v66-68 v2.38 v65-67 v2.37 v64-66 v2.36 v63-65 v2.35 v62-64 v2.34 v61-63 v2.33 v60-62
Win:复制webdriver到Python安装目录下
Mac:复制webdriver到/usr/local/bin目录下
4.运行
启动Chrome浏览器:
from selenium import webdriver browser = webdriver.Chrome() browser.get('http://www.baidu.com/')
5.实践,根据课程列表,抓取每节课介绍详情
# -*- coding: utf-8 -*- from selenium import webdriver #调用 Chrome 浏览器 from selenium.webdriver.common.keys import Keys #调用键盘按键操作需要引入keys 包 from selenium.webdriver.common.action_chains import ActionChains #鼠标事件 from selenium.webdriver.support import expected_conditions as EC #expected_conditions判断当前页面的是否有XX。由于这个模块名称比较长,所以为了后续的调用方便,重新命名为EC了 from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait #显性等待,程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间 import os,time browser = webdriver.Chrome() #打开谷歌 browser.implicitly_wait(30) # 隐性等待,最长等30秒 browser.get("https://www.beijingfundtown.com/cloud-class/course") #输入地址 #'''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表''' instance = WebDriverWait(browser,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.cur-left-con'))) # browser.minimize_window() #将浏览器最小化显示 opt = webdriver.ChromeOptions() # 创建Chrome参数对象 opt.headless = True # 把Chrome设置成可视化无界面模式,windows/Linux 皆可 # for循环enumerate()(单词意思是枚举的意思)是python中的内置函数 for i, ins in enumerate(instance): try: href = ins.find_element_by_tag_name('a').get_property('href') # ins.click() b = webdriver.Chrome(options=opt) #把Chrome设置成可视化无界面模式 b.get(href) time.sleep(1) print(b.find_element_by_id("desc").text) b.quit() except Exception as e: print(str(e)+str(i)) time.sleep(1) #browser.maximize_window() # 浏览器全屏显示 time.sleep(1) browser.quit()