首页 > 其他 > 详细

scrapy框架第二天

时间:2019-06-25 22:22:45      阅读:224      评论:0      收藏:0      [点我收藏+]

1.scrapy数据分析

2.scrapy持久化存储

3.全站数据爬取

4.请求传参  +   五大核心组件

- 创建scrapy工程  scrapy startproject ProName

- 切换到工程目录下  cd ProName

- 创建spider文件夹    scrapy genspider SpiderName  www.xxx.com

-settings里面的一些设置
  - LOG_LEVEL = ‘ERROR‘
  - USER_AGENT=‘JHJAJHHJKAFHJFHJ‘
  - ROBOTSTXT_OBEY = False
-运行spider  scrapy crawl SpiderName

- scrapy的数据解析
  - 在scrapy中使用xpath解析标签中的文本内容或者标签属性的话,最终获取的是一个Selector的对象,且我们需要的字符串数据全部被封装在了该对象中
  - 如果可以确定xpath返回的列表只有一个列表元素则使用extract_first(),否则使用extract()
- scrapy的持久化存储
  - 基于终端指令:
    - 可以将parse方法的返回值对应的数据进行本地磁盘文件的持久化存储
    - scrapy crawl qiubai -o filePath
    - 优点:便捷
    - 缺点:局限性较强(数据不可以存储到数据库,数据存储文件的后缀有要求)

  - 基于管道:
    -编码流程:
      - 1.数据解析
      - 2.在item类中进行相关属性的封装
      - 3.实例化一个item类型的对象
      - 4.将解析的数据存储封装到item类型的对象中
      - 5.将item提交给管道
      - 6.在配置文件中开启管道
  - 注意事项:
    - 爬虫文件提交的item只会传递给第一个被执行的管道类
    - 在管道类的process_item方法中的return item,是将item传递给下一个即将被执行的管道类
    - 习惯:每一个process_item中都需要编写return item

 爬取糗百数据一:

1.存放在start_urls中的url会被scrapy自动的进行请求发送

2. def parse(self, response): 这个函数下面操作代码的数据解析

3.response.xpath()  scrapy用来定位标签的xpath,用法和etree的xpath差不多,但是response.xpath是scrapy自己封装的

4.scrapy的数据解析  

  - 在scrapy中使用xpath解析标签中的文本内容或者标签属性的话,最终获取的是一个Selector的对象,且我们需要的字符串数据全部被封装在了该对象中
  - 如果可以确定xpath返回的列表只有一个列表元素则使用extract_first(),否则使用extract()

5.运行之前,settings里面的一些参数需要设置

# -*- coding: utf-8 -*-
import scrapy
from qiubaiPro.items import QiubaiproItem
class QiubaiSpider(scrapy.Spider):
    name = qiubai
   #允许的域名,一般注释掉
    # allowed_domains = [‘www.xxx.com‘]

    # 存放在该列表中的url都会被scrapy自动的进行请求发送
    start_urls = [https://www.qiushibaike.com/text/]

    # 基于终端指令的持久化存储:可以将parse方法的返回值对应的数据进行本地磁盘文件的持久化存储
     def parse(self, response): 
        all_data = []

        #数据解析response.xpath:作者and段子内容
        div_list = response.xpath(//div[@id="content-left"]/div)

        for div in div_list:
            #在scrapy中使用xpath解析标签中的文本内容的话,最终获取的是一个Selector的对象,且我们需要的字符串数据全部被封装在了该对象中
            #如果可以确定xpath返回的列表只有一个列表元素则使用extract_first(),否则使用extract()
            author = div.xpath(./div[1]/a[2]/h2/text()).extract_first()
            content = div.xpath(./a/div/span/text()).extract()
            dic = {
                author:author,
                content:content
            }
            all_data.append(dic)
            # print(author,content)
        return all_data

 

scrapy框架第二天

原文:https://www.cnblogs.com/l1222514/p/11086994.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!