一个简单的scrapy

第一步创建project,已天涯网为例,抓取天涯网中的邮箱。

终端上输入命令,1,scrapy startproject tianya,2,cd tianya,3,scrapy genspider mytianya bbs.tianya.com

然后在mytainya.py文件中代码如下:

import scrapy
import re

from tianya import items


class MytianyaSpider(scrapy.Spider):
    name = 'mytianya'  # 爬虫名
    allowed_domains = ['tianya.com']  # 允许爬取的域名
    start_urls = ['http://bbs.tianya.cn/post-140-393968-1.shtml']  # 列表,可以多个,开始url

    # 主要逻辑
    # 清洗过程
    def parse(self, response):
        html = response.body.decode('utf-8')
        # dizi@sina.com.cn
        # 邮箱正则
        emailre = "[a-z0-9_]+@[a-z0-9]+\.[a-z]{2,4}"
        emailList = re.findall(emailre, html, re.I)  # 忽略大小写

        # print(emailList)
        # 实例化item 导入items.py文件中的类
        # item = items.TianyaItem()

        # item['email'] = emailList
        #
        # return item # 全部一起返回,不会经过pipeline
        # 去重操作需要用到pipelines,在setting.py文件中打开这个命令,ITEM_PIPELINES = {
      # 'tianya.pipelines.TianyaPipeline': 300,  # 优先级1-1000之内,数字越小,优先级越高
        #}
        # 存储过了,就不会存第二次

        for email in emailList:
            item = items.TianyaItem()
            item['email'] = email

            yield item

然后items.py文件代码如下:

import scrapy
class TianyaItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 抓取字段

    email = scrapy.Field()  # 邮箱



最后保存数据,在终端输入命令:scrapy crawl mytianya -o mytainya.json

可以保存多种数据类型:json,xml,csv,pickle等数据格式


如果想保存TXT格式,需要在pipelines.py文件中进行代码操作,如下演示:

class TianyaPipeline(object):

    def __init__(self):
        self.f = None
    # 开启爬虫时调用
    def open_spider(self, spider):  #open_spider函数方法是继承object类中的方法,所以写死了,只能是open_spider
        self.f = open("mytianya.txt", 'a+', encoding='utf-8', errors='ignore')
    # 存储到mytianya.txt的文档中,a+方式如果文件不存在则创建。
    def process_item(self, item, spider):
        self.f.write(item["email"] + '\n')
        return item  # 一定要,不能删除。
    # 关闭爬虫
    def close_spider(self, spider):
        self.f.close()
    def __del__(self):
        pass


如果想保存进数据库中则代码需要在pipelines.py文件中进行代码操作,如下演示:

import pymysql

class TianyaPipeline(object):
    def __init__(self):
        self.conn = None
        self.cousor = None

    def open_spider(self, spider):#open_spider函数方法是继承object类中的方法,所以写死了,只能是open_spider
        # 连接
        self.conn = pymysql.connect(host='127.0.0.1', user='root', password="123456",
                                    database='fate', port=3306,
                                    charset='utf8')
        #创建 游标
        self.cousor = self.conn.cursor()

    def process_item(self, item, spider):
        sql = "insert into tianya(email) VALUES (%r)" % \

              (item['email'])

        self.cousor.execute(sql)
        self.conn.commit()
        return item

    def close_spider(self, spider):
        self.cousor.close()

        self.conn.close()





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值