使用scrapy 框架来抓取100部美剧的信息

在开始爬取之前,必须创建一个新的 Scrapy 项目。进入自定义的项目目录中,运行下列命令:

创建项目命令
scrapy startproject 项目名称

切换到项目下

cd 项目名称目录

同时找到项目所见的文件夹 ,使用pycharm打来开(我用的是pycharm) 大致结构如下

下面来简单介绍一下各个主要文件的作用:

scrapy.cfg :项目的配置文件

mySpider/ :项目的 Python 模块,将会从这里引用代码

mySpider/items.py :项目的目标文件

mySpider/pipelines.py :项目的管道文件

mySpider/settings.py :项目的设置文件

mySpider/spiders/ :存储爬虫代码目录

 

在上一篇提到了整个爬取时的流程,今天我们实战一下 ,使用美剧100这个网站来爬取数据

 

创建美剧100的项目爬取文件

在之前的cmd命令行下输入,scrapy genspider s_mj100 meijutt.com

结构是 scrapy genspider + 文件名称 + 需要爬取的网站的域名

重新打开pycharm

接下来明确我们需要爬取的内容,在items中写好我们定义的字段(可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field 的类属性来定义一个Item(可以理解成类似于 ORM 的映射关系)。)

接下来就可以在我们新建的爬虫文件下写我们的代码了

记住在items下写好字段后需要将items导入到我们的爬取文件下,实例化调用

使用scrapy框架,不需要我们手动请求,框架底层会将请求的结果直接返回给我们使用

我们直接处理返回的内容

如果需要进行二次请求,直接使用callback方法,再写一个函数处理就可以了

拿到我们想要的数据后,打开settings下的pipelines 保存数据

在pipelines中

保存文件

完成!!!!

代码如下

# -*- coding: utf-8 -*-
import scrapy
from day0510.items import MJItem
from lxml import etree

class SMj100Spider(scrapy.Spider):
    name = 's_mj100'
    allowed_domains = ['www.meijutt.com']
    start_urls = ['https://www.meijutt.com/new100.html']

    def parse(self, response):
        content = response.body.decode('gb2312')
        response = etree.HTML(content)
        li_list = response.xpath('//ul[@class="top-list  fn-clear"]/li')
        for li in li_list:
            index = li.xpath('./div[1]/i/text()')[0]
            name = li.xpath('./h5/a/text()')[0]
            state = li.xpath('./span[1]/font/text()')[0]
            try:
                word = li.xpath('./span[1]/font/span/em/text()')
                word = word[0]
            except:
                word = '本季终'
            type = li.xpath('./span[2]/text()')[0]
            tv = li.xpath('./span[3]/text()')[0]
            time = li.xpath('./div[2]//text()')[0]
            detail_url = li.xpath('./h5/a/@href')[0]
            detail_url = 'https://www.meijutt.com' +detail_url

            item = MJItem()
            item['index'] = index
            item['name'] = name
            item['state'] = state
            item['name'] = name
            item['word'] = word
            item['type'] = type
            item['tv'] = tv
            item['time'] = time

            # yield item
            yield scrapy.Request(url=detail_url,meta={'data':item,'phantomjs':True},callback=self.parse_detail)

    def parse_detail(self,response):
        item = response.meta
        yield item


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值