Scrapy 项目 Item 数据基础使用

Scrapy 项目 Item 数据基础使用

1. 启用 item 管道

后面的数字是执行的级别, 数字越小越先执行.

在这里插入图片描述

2. 传值

Spider must return request, item, or None 传入值只支持这三种类型.

在这里插入图片描述

3. 保存数据

scrapy crawl csdn -o ./data/csdn/csdn.csv

在这里插入图片描述

4. 分组现象

scrapy.Request 方法

Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])

下面依次介绍这些参数。

  1. url: (必选)请求页面的url地址,bytes或str类型,如’http://www.python.org/doc’。
  2. callback: 页面解析函数, Callable类型,Request对象请求的页面下载完成后,由该参数指定的页面解析函数被调用。如果未传28
    递该参数,默认调用Spider的parse方法。
  3. method: HTTP 请求的方法,默认为’GET’。
  4. headers: HTTP 请求的头部字典,dict类型,例如{‘Accept’:‘text/html’, ‘User-Agent’:Mozilla/5.0’}。如果其中某项的值为None,就表示不发送该项HTTP头部,例如{‘Cookie’: None},禁止发送Cookie。
  5. body: HTTP请求的正文,bytes或str类型。
  6. cookies: Cookie信息字典,dict类型,例如{‘currency’: ‘USD’,‘country’: ‘UY’}。
  7. meta: Request的元数据字典,dict类型,用于给框架中其他组件传递信息,比如中间件Item Pipeline。其他组件可以使用Request对象的meta属性访问该元数据字典(request.meta),也用于给响应处理函数传递信息,详见Response的meta属性。
  8. encoding: url和body参数的编码默认为’utf-8’。如果传入的url或body参数是str类型,就使用该参数进行编码。
  9. priority: 请求的优先级默认值为0,优先级高的请求优先下载。
  10. dont_filter: 默认情况下(dont_filter=False),对同一个url地址多次提交下载请求,后面的请求会被去重过滤器过滤(避免重复下载)。如果将该参数置为True,可以使请求避免被过滤,强制下载。例如,在多次爬取一个内容随时间而变化的页面时(每次使用相同的url),可以将该参数置为True。
  11. errback: 请求出现异常或者出现HTTP错误时(如404页面不存在)的回调函数。

下面是爬取的列子

import scrapy
import re


class ShixianSpider(scrapy.Spider):
    # 唯一标识符
    name = 'shixian'
    # 允许的域名
    allowed_domains = ['shixian.com']
    # 开始的 URL
    start_urls = ['https://shixian.com/jobs']

    def parse(self, response, **kwargs):
        div_list = response.xpath("//div[@class='job-list']/div")

        for div in div_list:
            item = {
                "title": div.xpath(".//h5/text()").extract_first().strip(),
                "type_": div.xpath(".//h5/span/text()").extract_first().strip(),
                "url": div.xpath("./div[1]/a/@href").extract_first().strip(),
                "content": div.xpath("./div[1]//p/text()").extract_first().strip(),
                "price": re.compile("\d+").findall(div.xpath(".//h4/text()").extract_first())[0],
                "period": div.xpath(".//dl[1]/dd[2]/text()").extract_first().strip(),
                "budget": div.xpath(".//dl[2]/dd[2]/text()").extract_first().strip(),
                "start_time": div.xpath(".//dl[3]/dd[2]/text()").extract_first().strip()
            }
            # 进入细节页
            yield scrapy.Request(
                url="https://shixian.com/" + item["url"],
            	# self.parse_detail 调用 parse_detail 方法
                callback=self.parse_detail,
            	# 向 self.parse_detail 传入参数
                meta={
                    "item": item
                }
            )

        # 下一页
        next_url = response.xpath("//a[text()='›']/@href").extract_first()
        # 循环
        if next_url is not None:
            yield scrapy.Request(
                url="https://shixian.com/" + next_url,
                callback=self.parse
            )

    def parse_detail(self, response):
        item = response.meta["item"]
        item["name"] = response.xpath("//section[@class='user']//span/text()").extract_first().strip()
        item["address"] = response.xpath("//section[@class='company']/dl/dd[1]/span/text()").extract_first().strip()
        item["number"] = response.xpath("//section[@class='company']/dl/dd[2]/span/text()").extract_first().strip()
        item["financing"] = response.xpath("//section[@class='company']/dl/dd[3]/span/text()").extract_first().strip()
        yield item

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值