ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

关于selenium在python爬虫过程中的使用

2021-06-15 15:53:35  阅读:167  来源: 互联网

标签:python request self selenium spider 爬虫 import browser


一、关于selenium的介绍

根据百度百科介绍:Selenium是一个用于Web应用程序测试的工具,在现在的爬虫领域中可以直接模拟浏览器请求web服务器,使用场景:Ajax加载的页面,现代前端框架react、vue、angular开发的项目,你查看源代码根本看不到东西的那种情况下。

二、关于selenium的下载与安装

  • 1、安装

    pip install selenium
  • 2、还需要ChromeDriver才能驱动Chrome浏览器完成相应的操作。

    • 官网下载地址
    • window下的配置

      Windows下,建议直接将chromedriver.exe文件拖到PythonScripts目录下,或者工作空间下

    • mac电脑下配置

      
      # 1.移动到文件夹下
      
      sudo mv chromedriver /usr/bin
      
      # 2.配置环境变量
      
      export PATH="$PATH:/usr/local/chromedriver"
      
      # 3.刷新
      
      source ~/.profile
  • 3、在黑窗口中测试(输入chromedriver)

三、基本的使用

  • 1、模拟打开github网站

    from selenium import webdriver
    
    # 打开浏览器
    
    browser = webdriver.Chrome()
    
    # 进去网页
    
    browser.get(url='https://github.com/login')
    print(browser.page_source)
    
    # 关闭
    
    
    # browser.quit()
    
  • 2、获取元素及模拟登录github

    from selenium import webdriver
    from scrapy.selector import Selector
    import time
    
    # 打开浏览器
    
    browser = webdriver.Chrome()
    
    # 进去网页
    
    browser.get(url='https://github.com/login')
    
    # 休息几秒
    
    time.sleep(20)
    browser.find_element_by_css_selector('#login_field').send_keys('kuangshp@126.com')
    browser.find_element_by_css_selector('#password').send_keys('*****')
    browser.find_element_by_css_selector('input[name="commit"]').click()
    print(browser.page_source)
    browser.quit()
  • 3、在selenium中写javascript的代码,(适用于滑动解锁登录的情况,写博客的时候没注意哪个网站是滑动解锁的)

    ...(把上面的代码复制过来)
    time.sleep(3)
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")

四、方法一、写一个中间件将selenium集成到scrapy中抓取天猫上商品信息

  • 1、中间件的写法

    
    # 设置一个selenium的中间件
    
    from selenium import webdriver
    from scrapy.http import HtmlResponse
    import time
    
    
    class SeleniumMiddleware(object):
        def __init__(self):
            self.browser = webdriver.Chrome()
            super(SeleniumMiddleware, self).__init__()
    
        def process_request(self, request, spider):
            if spider.name == 'tianmao':
                self.browser.get(request.url)
                time.sleep(5)
                print('你访问的网站:{0}'.format(request.url))
                return HtmlResponse(url=self.browser.current_url, body=self.browser.page_source, encoding="utf-8", request=request)
  • 2、在spider获取值

    
    # -*- coding: utf-8 -*-
    
    import scrapy
    
    
    class TianmaoSpider(scrapy.Spider):
        name = 'tianmao'
        allowed_domains = ['detail.tmall.com']
        start_urls = [
            'https://detail.tmall.com/item.htm?spm=a1z10.1-b-s.w5003-18239599942.10.7ecd6d22DnmNOX&id=558343675882&rn=aad6d07ecc49599549f5df50943947f3&skuId=3633466738509&scene=taobao_shop']
    
        def parse(self, response):
            print('进来了-----')
            print(response.css('#J_PromoPrice .tm-price::text').extract_first(), '当前的价格')
    

五、直接在spider中使用selenium打开浏览器,然后在中间件中使用browser.get去访问网站

  • 1、关于spider的写法

    
    # -*- coding: utf-8 -*-
    
    import scrapy
    from selenium import webdriver
    from scrapy.xlib.pydispatch import dispatcher
    from scrapy import signals
    
    class TianmaoSpider(scrapy.Spider):
        name = 'tianmao'
        allowed_domains = ['detail.tmall.com']
        start_urls = [
            'https://detail.tmall.com/item.htm?spm=a1z10.1-b-s.w5003-18239599942.10.7ecd6d22DnmNOX&id=558343675882&rn=aad6d07ecc49599549f5df50943947f3&skuId=3633466738509&scene=taobao_shop']
    
        def __init__(self):
            self.browser = webdriver.Chrome()
            super(TianmaoSpider, self).__init__()
            # 设置信号监听spider_closed的时候关闭浏览器
            dispatcher.connect(self.spider_closed, signals.spider_closed)
    
        def parse(self, response):
            print('进来了-----')
            print(response.css('#J_PromoPrice .tm-price::text').extract_first(), '当前的价格')
    
        def spider_closed(self, spider):
            self.browser.quit()
  • 2、中间件的写法

    
    # 设置一个selenium的中间件
    
    from selenium import webdriver
    from scrapy.http import HtmlResponse
    import time
    
    
    class SeleniumMiddleware(object):
    
        def process_request(self, request, spider):
            if spider.name == 'tianmao':
                spider.browser.get(request.url)
                time.sleep(5)
                print('你访问的网站:{0}'.format(request.url))
                return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request)
  • 3、在settings.py中配置

标签:python,request,self,selenium,spider,爬虫,import,browser
来源: https://blog.51cto.com/u_3409716/2904165

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有