爬虫--Scrapy简易爬虫(单页爬取)

1.创建爬虫项目文件 meiju
2.修改settings中爬虫协议为False
3.meiju目录下,再次新建爬虫文件
–scrapy genspider <文件名> <爬虫的url> 这里用meijuSpider文件名
4.主项目下创建快速调试方式

在meijuSpider.py中

import scrapy
# 爬虫类: 继承scrapy.Spider
from ..items import MeijuItem


class MeijuspiderSpider(scrapy.Spider):
    # 爬虫名:唯一
    name = 'meijuSpider'

    # 允许的域名列表
    allowed_domains = ['meijutt.tv']

    # 第一个爬取的url
    start_urls = ['https://www.meijutt.tv/new100.html']

    #  解析响应数据
    # Scrapy内部爬取完成后自动调用,并返回响应数据
    def parse(self, response):
        # print(type(response))
        # <class 'scrapy.http.response.html.HtmlResponse'>

        # print(response.text)  # 字符串网页内容
        # print(response.body)  # 二进制网页内容

        # scrapy集成了xpath
        movie_list = response.xpath('//ul[@class="top-list  fn-clear"]/li')
        # print(movie_list)

        for movie in movie_list:
            # 电影名称
            # m_name = movie.xpath('./h5/a/text()')[0].extract()  # 获取data的文本数据
            # m_name = movie.xpath('./h5/a/text()').extract_first()  # 推荐 获取data的文本数据

            m_name = movie.xpath('./h5/a/text()').get()  # 推荐 获取data的文本数据
            # print(m_name)

            # 电影类型
            m_type = movie.xpath('./span[@class="mjjq"]/text()').get()
            # 电视台
            m_tv = movie.xpath('./span[@class="mjtv"]/text()').get()
            # 时间
            m_time = movie.xpath('./div[@class="lasted-time new100time fn-right"]/font/text()').get()

            # print(m_name, m_type, m_tv, m_time)

            # 创建item
            item = MeijuItem()
            item["mname"] = m_name  # 这里要以字典的方式写
            item["mtype"] = m_type
            item["mtv"] = m_tv
            item["mtime"] = m_time

            # 这里返回的item会进入到管道piplines中
            yield item

items.py中

import scrapy

# item: 一项,项目,数据
# 数据模型: 类似Django的Model
# 设置爬取哪些字段

class MeijuItem(scrapy.Item):
    mname = scrapy.Field()
    mtype = scrapy.Field()
    mtv = scrapy.Field()          #定义爬取的字段,上面爬取了名字 类型 时间 tv信息,所以这个定义
    mtime = scrapy.Field()

在pipelinses.py中

class MeijuPipeline:
    # 需要调用pipline需要做2件事:
    #  1. 在爬虫文件meijuSpider.py的parse方法中要yield item
    #  2. 在settings中配置pipline

    # 会被自动调用多次: 次数取决于meijuSpider中parse方法里yield item的次数
    def process_item(self, item, spider):

        # print(f'---- {item} ----')

        # 存入文件
        string = str((item['mname'], item['mtype'], item['mtv'], item['mtime']))
        self.fp.write(string + "\n")
        self.fp.flush()

        return item

    # 在开启爬虫时会自动被调用
    def open_spider(self, spider):
        print('开始爬虫...')
        # 打开文件
        self.fp = open('meiju_movie.txt', 'a', encoding='utf-8')

    # 在关闭爬虫时自动调用
    def close_spider(self, spider):
        print('爬虫关闭...')
        # 关闭文件
        self.fp.close()

在settings.py中

ITEM_PIPELINES = {
    'meiju.pipelines.MeijuPipeline': 300,
	}     #需要打开这个注释项,不然不能调用pipelines中的类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像风一样的男人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值