04. 爬虫之scrapy模块

一、xpath的使用

1、css、xpath通用的
2、xpath使用路径表达式在XML文档中选择节点
3、lxml模块为例,讲xpath选择(selenium,scrapy--->css/xpath)
4、用法:
	/ :从根节点开始选择,子节点
    // :从当前节点开始选择,子子孙孙节点
    @ :选取属性a[@href="image.html"],选择a标签,href属性为image1.html
    . :表示当前节点
    .. :表示父节点
    # 示例:
    /a[3] :选择当前节点下的第一个a标签
    /text() :选取href属性
    /@href :获取href属性
    /a[contain(@class, "li")]  : 类名中有li的a标签
    /a[@class="li"] : 类名等于li的a标签    

二、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()

三、scrapy架构介绍和安装

1、安装和使用介绍

# 1、scrapy就是爬虫界的django(很多东西用起来和django很像)
# 2、pip3 install scrapy  (有很多依赖可能会装不上,直接pip安装可能会报错)
	- windows安装:
        1、pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
    	2、pip3 install lxml
   		3、pip3 install pyopenssl
    	4、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
    	5、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
    	6、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
    	7、pip3 install scrapy
   
# 3、win平台有些模块不好装
	-pip3 install wheel 
    -http://www.lfd.uci.edu/~gohlke/pythonlibs 下载相应的wheel文件
    -pip3 install 把下载后的whl拖入即可(注意python,win版本)
   
# 4、只要装完:就会有scrapy命令

# 5、使用:
	- django创建项目:djangoadmin startproject 项目名(pycharm中也可以直接创建)
    - scrapy创建项目:scrapy startproject 项目名
    - 使用pycharm打开(pycharm不支持直接创建,只能用cmd命令创建)
    - django中创建app:python manage.py startapp app名称
    - scrapy中创建app: scrapy genspider 爬虫名称 爬虫地址
   
# 6、重要部分总结:
	- pip install scrapy
    - scrapy startproject
    - scrapy genspider 爬虫名称 爬虫地址

2、scrapy架构介绍

# 五大组件:
1、爬虫:SPIDERS
	- py文件,主要逻辑在这里面写

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

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

3、目录介绍

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        # 上线的配置文件 

四、scrapy的简单使用

# 1、运行爬虫项目:
	scrapy crawl 爬虫名     (打印运行日志)
    scrapy crawl cnblogs --nolog  (不打印日志)
   
# 需要记住的:
	- 解析:(def parse(self, response)- css
		- xpath
      '''
         xpath  
         选择文本  /text()
         选择属性  /@href

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

         # extract_first取一个
         # extract()  取所有(列表形式)
      '''
# 在解析的函数中使用yield Request对象,这个地址又会再去发请求
	- yield Request(url=url, callback=self.parser_detail)
    - 不写默认使用的yield Request(url=url, callback=self.parser)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值