• 爬虫之xpath和scrapy的基础使用等相关内容-137


    1 xpath的使用

    1 css  xpath  通用的
    2 XPath 使用路径表达式在 XML 文档中选取节点
    3 lxml模块为例,讲xpath选择(selenium,scrapy---》css/xpath)
    4 用法:

    # / :从当前节点开始选择,子节点
    # // :从当前节点开始选择,子子节点
    # @选取属性a[@href="image1.html"],选择a标签,href属性为image1.html
    # .. 表示父节点
    # /a[3] 选当前节点下第一个a标签
    # /text() 取这个标签的文本
    # /@href 获取href属性
    # /a[contains(@class,"li")] 类名中有li的a标签
    # /a[@class='li'] 类名等于li的a标签

     

    2 selenium爬取京东商品信息


    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys


    # 定义爬取函数

    def get_goods(bro):
       # 滑倒屏幕底部
       bro.execute_script('scroll(0,document.body.scrollHeight)')
       li_list = bro.find_elements_by_class_name('gl-item')
       for li in li_list:
           try:
               img_url = li.find_element_by_css_selector('.p-img>a>img').get_attribute('src')
               if not img_url:
                   img_url = li.find_element_by_css_selector('.p-img>a>img').get_attribute('data-lazy-img')
               img_url = 'https:' + img_url

               name = li.find_element_by_css_selector('.p-name em').text
               url = li.find_element_by_css_selector('.p-img>a').get_attribute('href')
               price = li.find_element_by_css_selector('.p-price i').text
               commit = li.find_element_by_css_selector('.p-commit a').text
               print('''
              商品名称:%s
              商品价格:%s
              商品链接:%s
              图片链接:%s
              商品评论数:%s
       
              ''' % (name, price, url, img_url, commit))
           except Exception as e:
               continue

       # 点击下一页

       next = bro.find_element_by_partial_link_text('下一页')
       next.click()
       # 再解析下一页的内容
       get_goods(bro)




    bro = webdriver.Chrome(executable_path='chromedriver.exe')


    try:
       bro.get('https://www.jd.com/')
       # 隐士等待

       bro.implicitly_wait(10)
       search_in = bro.find_element_by_id('key')
       search_in.send_keys('男士内衣')

       search_in.send_keys(Keys.ENTER)  # 敲击回车

       # bro.page_source--->bs4--lxml
       get_goods(bro)
    except Exception as e:
       print(e)

    finally:
       bro.close()



     

     

    3 scrapy架构介绍和安装

    0 框架---》别人帮我们写了好多代码,我们只需要再固定的位置写固定的代码
    1 爬虫界的django---》好多东西用起来跟django很像
    2 pip3 install scrapy  (依赖)
    -win平台:
           1、pip3 install wheel
           3、pip3 install lxml
           4、pip3 install pyopenssl(装这个装不上:更新pip,搜方案)
           5、下载并安装pywin32:https://github.com/mhammond/pywin32/releases
           6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
           7、执行pip3 install 下载目录Twisted-17.9.0-cp36-cp36m-win_amd64.whl
           8、pip3 install scrapy

    3 win平台有些模块不好装
    -pip3 install wheel
       -http://www.lfd.uci.edu/~gohlke/pythonlibs 下载相应的wheel文件
       -pip3 install 把下载后的whl拖入即可(注意python,win版本)

       
    4 只要装完:scrapy 命令
    -django创建项目:djangoadmin startproject 项目名(pycharm也可以直接创建)
       -scrapy创建项目:scrapy startproject 项目名
       -使用pycharm打开
       -django中创建app :python manage.py startapp app名字
       -scrapy创建爬虫: scrapy genspider 爬虫名 爬虫的地址
       
       
    5 scrapy总结
    -pip3 install scrapy
       -scrapy startproject 项目名
       -scrapy genspider 爬虫名 爬虫的地址

    3.1 scrapy的架构


    # 5大组件:
    1 爬虫:SPIDERS
    -刚刚创建的一个个爬虫(py文件,以后主要再这写)
    2 引擎EGINE
    -大总管,负责各个组件的沟通(写代码不涉及到),
       -引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件
    3 pipline持久化
    -爬完数据解析完,入库(py文件,存数据库,存文件,存redis,在这写)
       -在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
    4 调度器
    -调度谁先被爬取,谁后爬取(通过配置来操作)
       -用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
    5 下载器
    -真正取爬取数据的(写代码也不涉及)

    # 两大中间件
    1 爬虫中间件,介于爬虫和引擎之间,可以写多个(一般不写)
    2 下载中间件,介于下载器和引擎之间,可以写多个(写的多)
       
       

    3.2 目录介绍

    myfirstscrapy # 项目名字
       myfirstscrapy # 文件夹
           spiders   # 所有的爬虫文件都放在这个下面
               __init__.py
               chouti.py  # 爬虫1 (写代码)
               baidu.py   # 爬虫2
               cnblogs.py # 爬虫3
           settings.py # 整个项目的配置文件
           items.py    # 写一些类,对比django的models   (写一些类)
           middlewares.py # 爬虫中间件和下载中间件都写在这 (写中间件)
           pipelines.py  # 持久化,存数据,文件,都在这写(数据清洗入库) (写代码)
       scrapy.cfg        # 上线的配置文件
       

     

    4 scrapy的简单使用

    1 运行爬虫
    scrapy scrawl 爬虫名           打印运行日志
       scrapy crawl cnblogs --nolog   不打印日志

       
    2 记住的
    -解析(def parse(self, response)
      -css
           -xpath
       -解析
       '''
                xpath  
                选择文本 /text()
                选择属性 /@href

                css
                选择文本 ::text
                选择属性 ::attr(href)

                # extract_first取一个
                # extract() 取所有(列表形式)

              '''
      -在解析的函数中yeild Request对象,这个地址又会去发请求
    -yield Request(url=url,callback=self.parser_detail)
      -不写默认用yield Request(url=url,callback=self.parser)

     

     

     

     

     

  • 相关阅读:
    iptables详解(7):iptables扩展之udp扩展与icmp扩展
    iptables详解(6):iptables扩展匹配条件之’–tcp-flags’
    iptables(五)iptables匹配条件总结之二(常用扩展模块)
    Neutron之OVS
    Neutron三层网络服务实现原理
    Neutron二层网络服务实现原理
    LoadBalancerv2的原理分析
    Haproxy介绍
    基于zepto的手机焦点图touchstart touchmove
    zepto.js 处理Touch事件(实例)
  • 原文地址:https://www.cnblogs.com/usherwang/p/14470891.html
Copyright © 2020-2023  润新知