• selenium在爬虫领域的初涉(自动打开网站爬取信息)


    selenium简介

    Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

    github地址:https://github.com/SeleniumHQ/selenium

    为什么selenium可以用在爬虫领域?

    一般的写爬虫的方法是用python脚本直接对目标网站进行访问,而且只对目标数据进行采集,访问速度很快,这样目标网站很容易就识别出你是机器人,然后把你封锁了~~而使用selenium写爬虫,python脚本操控浏览器进行访问,也就是说python脚本和目标网站之间多了个浏览器的操作,这样的行为更像是人类行为。这样很多难爬的网站也可以轻而易举的抓数据了。

    使用selenium前的准备

    • 如果你没有安装selenium,请先使用conda install selenium或pip install selenium.
    • 下载好你的firefox浏览器(这里推荐firefox,当然chrome也行)
    • 安装geckodriver 。geckodrive下载地址:https://github.com/mozilla/geckodriver/releases
      将下载的geckodriver.exe 放到path路径下 D:/Python/Python35-32/(就是放到你的python安装路径下,我这里是假设你已经安装好了python并且Python安装路径已经被添加到了path环境变量下)
      如果你没有安装geckodriver.exe应该会出现如下的错误:
      WebDriverException: ‘geckodriver’ executable needs to be in PATH.

    selenium基本知识

    • 自动打开某个网址
    from selenium import webdriver
    from bs4 import BeautifulSoup
    初始化浏览器
    driver = webdriver.Firefox()
    打开某个网址
    driver.get(url)
    • 输入登录账号密码(如果需要登录的话)
    #这里是根据xpath输入账号和密码的
    driver.find_element_by_xpath(xpath).clear()
    driver.find_element_by_xpath(xpath).send_keys("你的账号")
    driver.find_element_by_xpath(xpath).clear()
    driver.find_element_by_xpath(xpath).send_keys("你的密码")
    
    #定位“点击登录”框的位置的xpath,通过click()执行登录
    driver.find_element_by_xpath(xpath).click()
    • 访问你想爬的网页
    #获取该网页的源码
    driver.get(url)
    html = driver.page_source
    bs4 = BeautifulSoup(html,'lxml'

    selenium使用

    • 打开百度首页
    ## 引入WebDriver的包
    from selenium import webdriver
    ## 创建浏览器对象
    browser = webdriver.Firefox()
    ## 打开百度网站
    browser.get('https://www.baidu.com/')
     效果:自动打开浏览器,然后打开百度首页
    
    • 模拟登录csdn
    from selenium import webdriver
    ## 创建浏览器对象
    browser = webdriver.Firefox()
    ## 打开小米社区网站
    browser.get('https://passport.csdn.net/account/login')
    browser.find_element_by_xpath("//*[@id='username']").clear()#清空输入框
    browser.find_element_by_xpath("//*[@id='username']").send_keys("你的账号")#输入账号
    browser.find_element_by_xpath("//*[@id='password']").clear()#清空输入框
    browser.find_element_by_xpath("//*[@id='password']").send_keys("你的密码")#输入密码
    browser.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/div[1]/div/form/input[8]").click()#登录
    
     效果:自动打开浏览器,然后打开csdn登录首页,自动输入用户名和密码实现登录。
    
    • 模拟登录小米社区并抓取帖子标题
    ## 引入WebDriver的包
    from selenium import webdriver
    from bs4 import BeautifulSoup
    ## 创建浏览器对象
    browser = webdriver.Firefox()
    ## 打开小米社区网站
    browser.get('https://account.xiaomi.com/pass/serviceLogin?callback=http%3A%2F%2Fbbs.xiaomi.cn%2Flogin%2Fcallback%3Ffollowup%3Dhttp%253A%252F%252Fbbs.xiaomi.cn%252F%26sign%3DM2E4MTg3MzE3MGJmZGFiMTc0MTE5NmNjZTAyYWNmMDZhNTEwOTU2NQ%2C%2C&sid=new_bbs_xiaomi_cn&_locale=zh_CN')
    browser.find_element_by_xpath("//*[@id='username']").clear()#清空输入框
    browser.find_element_by_xpath("//*[@id='username']").send_keys("你的账号")#输入账号
    browser.find_element_by_xpath("//*[@id='pwd']").clear()#清空输入框
    browser.find_element_by_xpath("//*[@id='pwd']").send_keys("你的密码")#输入密码
    browser.find_element_by_xpath("//*[@id='login-button']").click()#登录
    base_url="http://bbs.xiaomi.cn/d-{page}"
    #我这里是抓取了前5页,当然你可以抓取的更多
    for i in range(1,6):
        url=base_url.format(page=i)
        browser.get(url)
        bs4=BeautifulSoup(browser.page_source,'lxml')
        titles=bs4.find_all('div', {'class':'title'})
        for title in titles:
            title_content=title.get_text().strip('
    ')
            print(title_content)
    
    效果:
    

    效果

    遇到的一些问题

    1. 如何获取xpath?
      这里说一个最简单的方法:
      打开firefox浏览器,进入相应页面,右键某个网页元素点击查看元素,然后复制xpath.如下图所示:
      这里写图片描述
      这里写图片描述
    2. WebDriverException: ‘geckodriver’ executable needs to be in PATH.
      这个上面也提到过。
      geckodrive下载地址:https://github.com/mozilla/geckodriver/releases
      将下载的geckodriver.exe 放到path路径下 D:/Python/Python35-32/(就是放到你的python安装路径下,我这里是假设你已经安装好了python并且Python安装路径已经被添加到了path环境变量下)

      github项目地址(系列文章包含常见第三库的使用与爬虫,会持续更新)

  • 相关阅读:
    Go中的结构实现它的的写法注意事项
    Go语言中的struct的初始化。
    python中的number类型
    python的类型
    今天起,每天记录python等语言的编程心得和体会
    destoon 下apache伪静态排除目录规则
    如何进行数据库设计?
    Spring IOC知识点
    SpringBoot框架:集成Security完成认证鉴权
    CentOS 7 本地安装kubernetes
  • 原文地址:https://www.cnblogs.com/snailclimb/p/9086427.html
Copyright © 2020-2023  润新知