python爬虫之初恋 selenium

selenium 是一个web应用测试工具,能够真正的模拟人去操作浏览器。 用她来爬数据比较直观,灵活,和传统的爬虫不同的是, 她真的是打开浏览器,输入表单,点击按钮,模拟登陆,获得数据,样样行。完全不用考虑异步请求,所见即所得。

selenium语言方面支持java/python,浏览器方面支持各大主流浏览器谷歌,火狐,ie等。我选用的是python3.6+chrome组合


chrome

写python爬虫程序之前,需要准备两样东西:

1.[chrome][1]/浏览器              https://www.google.cn/chrome/
2.[chromedriver][2] /浏览器驱动   http://chromedriver.storage.googleapis.com/index.html

浏览器和浏览器驱动的搭配版本要求比较严格,不同的浏览器版本需要不同的驱动版本;我的版本信息:

 chrome info: chrome=66.0.3359.139
 Driver info: chromedriver=2.37.544315 

其他版本对照

chromedriver版本

Chrome版本

v2.37

v64-66

v2.36

v63-65

v2.34

v61-63

chrome浏览器 这里需要注意的是如果想更换对应的谷歌浏览器,要高版本的请务必直接升级处理,低版本的卸载时要彻底!彻底!彻底!卸载,包括(Google升级程序,注册表,残留文件等),再安装。否则爬虫程序启动不了浏览器。

chromedriver浏览器驱动 chromedriver 放置的位置也很重要,把chromedriver放在等会要写的.py文件旁边是最方便的方法。当然也可以不放这里,但是需要配置chromedriver的路径,我这里就不介绍这种方法了。

火狐驱动下载地址:https://github.com/mozilla/ge...

python

终于开始敲代码了

打开网站

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://segmentfault.com/")

三行代码即可自动完成启动谷歌浏览器,输出url,回车的骚操作。 此时的窗口地址栏下方会出现【Chrome 正在受到自动测试软件的控制】字样。

提交表单

下面我们来尝试控制浏览器输入并搜索关键字找到我们这篇文章; 先打开segmentfault网站,F12查看搜索框元素

<input id="searchBox" name="q" type="text" placeholder="搜索问题或关键字" class="form-control" value="">

发现是一个id为searchBox的input标签,ok

from selenium import webdriver
browser = webdriver.Chrome()   #打开浏览器
browser.get("https://segmentfault.com/")   #输入url

searchBox = browser.find_element_by_id("searchBox")  #通过id获得表单元素
searchBox.send_keys("python爬虫之初恋 selenium")   #向表单输入文字
searchBox.submit()    #提交

find_element_by_id()方法:根据id获得该元素。 同样还有其他方法比如

find_element_by_xpath()

通过路径选择元素

find_element_by_tag_name()

通过标签名获得元素

find_element_by_css_selector()

通过样式选择元素

find_element_by_class_name()

通过class获得元素

find_elements_by_class_name()

通过class获得元素们,element加s的返回的都是集合

举个栗子:

1.find_elements_by_css_selector("tr[bgcolor='#F2F2F2']>td")
  获得 style为 bgcolor='#F2F2F2' 的tr的子元素td

2.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div[3]/div[1]/div[2]/div/h4/a")
  获得此路径下的a元素。
  find_element_by_xpath方法使用谷歌浏览器F12选择元素右键copy->copyXpath急速获得准确位置,非常好用,谁用谁知道
  
3.find_element_by_xpath("..")获得上级元素

抓取数据

获得元素后.text方法即可获得该元素的内容 我们获得文章的简介试试:

from selenium import webdriver
browser = webdriver.Chrome()   #打开浏览器

browser.get("https://segmentfault.com/")   #输入url
searchBox = browser.find_element_by_id("searchBox")  #通过id获得表单元素
searchBox.send_keys("python爬虫之初恋 selenium")   #向表单输入文字
searchBox.submit()                                #提交

text = browser.find_element_by_xpath("//*[@id='searchPage']/div[2]/div/div[1]/section/p[1]").text
print(text)

除了捕获元素还有其他的方法:

refresh()

刷新

close()

关闭当前标签页 (如果只有一个标签页就关闭浏览器)

quit()

关闭浏览器

title

获得当前页面的title

window_handles

获得所有窗口选项卡id集合

current_window_handle

获得当前窗口选项卡id

switchTo().window()

根据选项卡id切换标签页

execute_script('window.open("www.segmentfault.com")')

执行js脚本(打开新标签)

maximize_window()

最大化

get_screenshot_as_file()

截图(图片保存路径+名称+后缀)

set_page_load_timeout(30)

设置加载时间

启动前添加参数

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--proxy-server=http://101.236.23.202:8866")  //代理
chromeOptions.add_argument("headless")   //不启动浏览器模式

不加载图片启动

def openDriver_no_img():
    options = webdriver.ChromeOptions()
    prefs = {
        'profile.default_content_setting_values': {
            'images': 2
        }
    }
    options.add_experimental_option('prefs', prefs)
    browser = webdriver.Chrome(chrome_options=options)
    return browser

反爬虫应对手段

二维码识别:https://segmentfault.com/a/11... IP代理:https://segmentfault.com/n/13...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端杂货铺

iframe编程的一些问题

前几天做一个用iframe显示曲线图的demo,发现对iframe的contentDocument绑定 onclick事件都无效,而在页面中对iframe.co...

35060
来自专栏前端架构与工程

Node.js建站笔记-使用react和react-router取代Backbone

斟酌之后,决定在《嗨猫》项目中引入react,整体项目偏重spa模式,舍弃部分server端的模板渲染,将一部分渲染工作交给前端react实现。 react拥有...

26790
来自专栏河湾欢儿的专栏

wx 小程序

1.首先我们拿到一个新的框架(我感觉wx小程序和框架差不多),先分析里面的东西 例如这个微信小程序 我们先看下面的四个文件[图片上传失败...(image-...

17430
来自专栏移动开发面面观

React Native 一个开始

11120
来自专栏DeveWork

添加WordPress评论输入邮箱实时显示Gravatar头像功能

这个不是什么新鲜的功能了,这个功能即是实现当留言评论时,你输入email后,就会实时显示你的Gravatar头像。对于提高用户体验是有非常的帮助,特别是用户评论...

22350
来自专栏思考的代码世界

Python网络数据采集之采集JavaScript|第09天

21350
来自专栏极客编程

简单介绍一下vue2.0

Vue是用于构建用户界面的渐进框架。作者尤雨熙特别强调它与其他的框架不同,Vue是渐进式的框架,可以逐步采用,不必一下就通过框架去重构项目。 另外Vue的核心库...

19220
来自专栏Jerry的SAP技术分享

将Chrome调试器里的JavaScript变量保存成本地JSON文件

前端开发的朋友们可能会遇到这个需求:将您负责开发的网页的全部内容,包括文字和图片,一起保存成一个PDF文件。如果采用屏幕截图的话,默认Windows操作系统的截...

40130
来自专栏前端杂谈

移动端引入的字体文件过大处理方法

1K220
来自专栏数据小魔方

excel中的超链接函数

今天跟大家分享在excel中超链接函数的用法! ▼ 其实excel中想要达到超链接效果有很多种方法:直接手工设置、超链接函数、开发工具、VBA等都可以实现。但是...

51490

扫码关注云+社区

领取腾讯云代金券