zoukankan      html  css  js  c++  java
  • 爬虫之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)

     

     

     

     

     

  • 相关阅读:
    LeetCode 326. Power of Three
    LeetCode 324. Wiggle Sort II
    LeetCode 322. Coin Change
    LeetCode 321. Create Maximum Number
    LeetCode 319. Bulb Switcher
    LeetCode 318. Maximum Product of Word Lengths
    LeetCode 310. Minimum Height Trees (DFS)
    个人站点大开发!--起始篇
    LeetCode 313. Super Ugly Number
    LeetCode 309. Best Time to Buy and Sell Stock with Cooldown (DP)
  • 原文地址:https://www.cnblogs.com/usherwang/p/14470891.html
Copyright © 2011-2022 走看看