首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python——爬虫入门Selenium的简单使用

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

作者头像
Originalee
发布2018-08-30 11:03:20
9090
发布2018-08-30 11:03:20
举报
文章被收录于专栏:编程之旅编程之旅

之前的两篇我们讲解了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更多的用法,希望大家能认真阅读他的文档。这一定是一个会让你非常受用的工具的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档