【爬虫实践】记一次Scrapy框架入门使用爬取豆瓣电影数据

本文介绍了一次使用Scrapy框架爬取豆瓣电影数据的实践过程,包括创建Scrapy项目、设置Spider、运行爬虫以及数据持久化的步骤。通过自定义规则和回调函数解析网页内容,最终将数据保存到result.json文件中。
摘要由CSDN通过智能技术生成

本次的学习分享主要是使用一次Scrapy框架,毕竟在很多次的时候,自己在提取一些或是需要实验数据的时候,数据量要求不大,很快便能通过简单的request等库进行调用,然后获取数据。

这次,则是想要使用一次Scrapy框架,毕竟如果一次通配使用Scrapy也算是为了以后的学习实验进行提前准备,顺便记录要点,容易出错的地方。

实验环境 版本号
python 3.6.3
Scrapy 1.5.1

最基本的环境要求,本次实验使用Pycharm进行实践,而不是简单使用cmd这块黑黑的面板进行操作,因为实在是太麻烦了,再者那就是如果你已经有了一定的基础了,那么完全可以直接使用IDEA进行一些操作,省时省力,也差不了多少。并且如果你需要设置的Scrapy新项目的位置不在其他地方,打开pycharm的终端之后,你就会发现,当前路径已经是到了你项目路径下!

第一步:设置启动一个新的Scrapy项目! 

1.打开pycharm,打开底部的终端。

如图所示。

2.将当前的路径下键入 以下命令!

scrapy startproject <scrapyProjectName>

 其中的scrapyProjectName就是你要设置的项目名称,很重要,因为之后的启动爬虫项目,也是必须要用这个名称,在这里,既然是以豆瓣的电影为目标数据集,那么就设置本次项目的名称为douban。

scrapy startproject douban

结果生成了如下的项目结构!

 第二步:根据第一步当中的友好提示,设置Spider啦!

这一步也很简单,看见./douban/douban/spiders路径没,大家是否注意过,这个地方的spiders文件夹名称是叫做spiders,嗯复数哦!意味着,其实我们的爬虫也就是我们的蜘蛛其实是可以设计很多个的,但是现在我们只要爬虫电影数据,那么好了,我们就设置一个名称为movie的spider吧!

语法结构可是在第一步的第二张图告诉我们的!

依旧是在终端位置输入!

cd douban
scrapy genspider movie movie.douban.com --template=crawl

 以上的movie就是我们设置的spider的名称,而且大家注意到没还设置了个example.comurl,而这个url其实就是我们spider要爬虫的入口url或者说是入口域名!

结果便是在spiders文件夹下将生成movie.py文件,而这个文件就是我们自定义依照crawl模板生成的spider!

而movie的spider(小蜘蛛)文件生成之后,我们会发现,在这个文件当中,其实最主要的就三个要关注的地方!一个便是start_url,一个就是rules,一个就是parse_item函数!

start_url是我们要爬取数据的页面,在这里,我们就爬取豆瓣的前250电影!

rules当中,要爬取也是规则也是在这个页面下操作的!

以及对应每次爬取之后的数据要怎么样去获取抽取出来,则就是parse_item的工作!

所以以下的movie.py当中的代码如下:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

from douban.items import DoubanItem


class MovieSpider(CrawlSpider):
    name = 'movie'
    allowed_domains = ['movie.douban.com']
    start_urls = ['https://movie.douban.com/top250']
    rules = (
        Rule(LinkExtractor(allow=(r'https://movie.douban.com/top250\?start=\d+.*'))),
        Rule(LinkExtractor(allow=(r'https://movie.douban.com/subject/\d+')), callback='parse_item'),
    )

    def parse_item(self, response):
        sel = Selector(response)
        item = DoubanItem()
        item['name']=sel.xpath('//*[@id="content"]/h1/span[1]/text()').extract()
        item['year']=sel.xpath('//*[@id="content"]/h1/span[2]/text()').re(r'\((\d+)\)')
        item['score']=sel.xpath('//*[@id="interest_sectl"]/div/p[1]/strong/text()').extract()
        item['director']=sel.xpath('//*[@id="info"]/span[1]/a/text()').extract()
        item['classification']= sel.xpath('//span[@property="v:genre"]/text()').extract()
        item['actor']= sel.xpath('//*[@id="info"]/span[3]/a[1]/text()').extract()
        return item

以上有很重要的位置便是rules的设置,这部分的设置,使用回调函数,只有第二个链接才进行使用,可以查看下豆瓣的电影某条路径,你就可以知道为什么只设置了第二条进行回调函数parse_item,而第一条没有呢!

因为第一条是整个一页面!

而第二条则是某一条目的具体定位,只能通过第二条来页面当中某一条目的所有信息!!

(当然以上的写法主要是使用了r开头的regex也就是正则匹配!实在是太强大了是不是哈哈!)

注意到此代码其实是引入了Scapy项目当中的items,items其实就是我们生成的数据当中的域,其域有多个文件属性名,类似json的数据结构&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值