Scrapy爬虫框架笔记(三)——实例

根据前两篇笔记,Scrapy爬虫框架笔记(二)。以此运用scrapy框架进行爬虫福布斯富豪榜这个网站。网页如图所示,我们爬取排名、姓名、财富值、财富来源、年龄、城市、行业信息。
在这里插入图片描述

创建项目

命令行进入在我们想创建的目录,输入scrapy startproject tutorial即可创建一个tutorial文件夹。然后在spiders文件夹下创建一个dmoz_spider.py文件。

item

依据我们要获取的信息来定义Item

import scrapy

class DmozItem(scrapy.Item):
    index = scrapy.Field()
    name = scrapy.Field()
    money = scrapy.Field()
    company = scrapy.Field()
    age=scrapy.Field()
    city=scrapy.Field()
    major=scrapy.Field()

Spider

在刚刚创建的dmoz_spider.py文件中,进行编写。因为是表格,tr标签里面多个td标签,所以提取内容时用td[i]选取,又因为想要文字,所以后面加上text()。

import scrapy
from tutorial.items import DmozItem

class DmozSpider(scrapy.spiders.Spider):
    name = "dmoz"# 爬虫的唯一标识,不能重复,启动爬虫的时候要用
    allowed_domains = ["forbeschina.com"]# 限定域名,只爬取该域名下的网页
    start_urls = [
        "https://www.forbeschina.com/lists/1728"# 开始爬取的链接
    ]

    def parse(self, response):
        filename = response.url.split("/")[-2]  # 获取url,用”/”分段,获去倒数第二个字段
        with open(filename+".txt", 'wb') as f:
            f.write(response.body)

        table=response.xpath("//table")
        tbody=table.xpath(".//tbody")
        tr=tbody.xpath(".//tr")
        for t in tr:
            item = DmozItem()
            item['index']=t.xpath("td[1]/text()").extract()
            item['name']=t.xpath("td[2]/text()").extract()
            item['money']=t.xpath("td[3]/text()").extract()
            item['company']=t.xpath("td[4]/text()").extract()
            item['age']=t.xpath("td[5]/text()").extract()
            item['city']=t.xpath("td[6]/text()").extract()
            item['major']=t.xpath("td[7]/text()").extract()
            yield item

Item Pipeline

储存为json格式和csv格式。

import json
import csv
import codecs

class JsonPipeline(object):
    def __init__(self):
        print("打开文件")
        self.file=codecs.open('dmoz.json','wb',encoding='utf-8')
    def process_item(self,item,spider):
        print("正在写入")
        line=json.dumps(dict(item),ensure_ascii=False)+'\n'
        self.file.write(line)
        return item
    def close_spider(self,spider):
        print("完成,关闭文件")
        self.file.close()

class CsvPipeline(object):
    def __init__(self):
        print("打开文件")
        self.file=codecs.open('dmoz.csv','a',encoding='gb18030')
        self.fieldnames = ["index", "name", "money", "company", "age", "city","major"]
        self.writer = csv.DictWriter(self.file, fieldnames=self.fieldnames)
        self.writer.writeheader()
    def process_item(self,item,spider):
        print("正在写入")
        self.writer.writerow(item)
        return item
    def close_spider(self,spider):
        print("完成,关闭文件")
        self.file.close()

Setting

ITEM_PIPELINES = {
   'tutorial.pipelines.JsonPipeline': 400,
   'tutorial.pipelines.CsvPipeline':500,
}

运行

执行scrapy crawl dmoz即可得到结果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值