Python——爬虫入门Selenium的简单使用

之前的两篇我们讲解了Python内的urllib库的使用,不知道大家有没有在爬取一些动态网站的时候,发现自己用urllib爬取到的内容是不对的,无法抓取到自己想要的内容,比如淘宝的店铺宝贝等,它会用js动态的加载内容,此时selenium这个家伙就能派上用场了。

selenium是什么?简单的概括,它的初衷就是自动化测试工具。它支持各种浏览器,包括chrome,safari,firefox等主流界面式浏览器,如果你在这些浏览器里安装一个selenium的插件,那么便可以方便的实现Web界面的测试。换句话说selenium支持这些浏览器驱动,selenium支持多种语言开发,比如Python、Java、C、Ruby等等。

而在爬虫这个领域,我们则用这个自动化测试工具来模拟我们是真实的浏览器用户,用他来爬取页面非常方便,只要按照访问步骤模拟人在操作就可以了,完全不用操心cookie,session的处理,它甚至可以帮助你输入账户、密码,然后点击登录按钮,这些功能在应对一些常见的反爬虫机制时非常有用。

在我们开始示例代码之前,首先你要在Python中安装selenium库

pip install selenium

安装好了之后,我们便开始探索抓取方法了。

那么我们就把一个淘宝店铺为示例,试着来爬取他里面的宝贝列表。你可以先用urllib来验证一下这个url,是不是爬取不到浏览器显示的dom内容。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'Lix'

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
import time

def selenium_example():
    site_url = 'https://elcjstyle.taobao.com/search.htm?spm=a1z10.1-c-s.0.0.68616fccLXsimv&search=y'

    driver = webdriver.Chrome()
    driver.get(site_url)
    time.sleep(3)
    content = driver.page_source.encode('utf-8')
    print driver.title
    print content

def main():
    selenium_example()

if __name__ == "__main__":
    main()

执行完这段示例代码之后,不出意外会打印出店铺名字和整张页面的html代码。可以把这个代码和Chrome内调试环境下看到的html代码比较一下,是否完全一样了。

而在selenium中,更是有很多不同的策略可以定位到一个元素,实现它本身的自动化测试目的,而我们也可以配合Beautiful Soup或者Xpath来提取我们想要的内容。

一次查找多个元素 (这些方法会返回一个list列表):

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

假如我们要通过name来查找一个元素:

页面元素如下所示:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

name属性为 username & password 的元素可以像下面这样查找:

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')

通过这样的两句代码,我们就能提取到username和password的元素,所以selenium真的是一个很有用的工具呢。

关于selenium更多的用法,希望大家能认真阅读他的文档。这一定是一个会让你非常受用的工具的。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喵了个咪的博客空间

phalcon-入门篇9(view层基础使用)

#phalcon-入门篇9(view层基础使用)# ? 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好者,我们提供...

3219
来自专栏macOS 开发学习

macOS 应用注入开发简介与实践

本文主要介绍的是动态链接库注入的相关实践,这不仅仅局限于macOS,同时对iOS应用也具有相同的效果,希望大家可以借鉴使用.

1473
来自专栏互联网杂技

如何学习用Typescript写Reactjs?

首先扫盲一下,先从搭建环境开始: 1.安装node,因为ts的编译器是js/ts写的; 安装node后同时获得npm命令,这是nodejs世界里的包管理器...

57112
来自专栏武军超python专栏

2018年8月10日对飞机大战的思考和将python源文件打包成exe可执行文件

今天遇到的新单词: script n脚本 terminate vi结束 ***************************** 将Python文...

1633
来自专栏python学习之旅

Python网络爬虫笔记(五):下载、分析京东P20销售数据

1、      翻页的时候,谷歌F12的Network页签可以看到下面的请求。(这里的翻页指商品评价中1、2、3页等)

5087
来自专栏互联网开发者交流社区

Redis简介

1522
来自专栏小程序之家

如何在小程序中实现扫一扫功能

扫码,是现代生活不可或缺的一部分,不管是实现共享单车开锁,还是去自动售卖机付款,都需要扫码二维码或者条形码。那么,可不可以将扫码功能集成在小程序端呢?答案是可以...

2.2K4
来自专栏Java Web

Java学习笔记(1)——搭建好所需要的环境配置IDEA

前言:后来仔细思考了一下,从零开始学习Java的系列标题略长(实际改过来的也不短),并且不能正确反映写文的目的,所以决定从这一篇开始改为Java学习笔记。之前...

3594
来自专栏逸鹏说道

MVCforum 支持多国语言

MVCforum支持多国语言。要创建一个更新的语言,你需要去您的管理面板 /admin/ adminlanguage 在这里,您可以添加新的语言键和关联的值。或...

2714
来自专栏开源优测

python selenium2示例 - Page Object Model

前言 python selenium2是当前主流的web自动化测试框架,提供了多浏览器的支持(chrome、ie、firefox、safari等等),同时支持...

35410

扫码关注云+社区