为了账号安全,请及时绑定邮箱和手机立即绑定

Scrapy入门案例——爬取豆瓣电影

标签:
Python

webp

请谨记如下三条命令:

scrapy startproject xxx    创建scrapy项目
scrapy genspider xxx "xxx.com"  创建爬虫spider,名字不能和项目名一样
scrapy crawl xxx  运行某个爬虫项目

首先scrapy startproject douban 建立项目,其次切换到spiders目录下,scrapy genspider douban_movie 建立爬虫。

webp


我们要爬取的数据很简单,是豆瓣电影排行榜。之所以说它简单是因为它请求返回的数据我们可以转换成规整的json列表,并且获取分页链接也很简单。


webp


我们只获得title和url的信息。明确了请求目标后,我们开始编写items

import scrapyclass DoubanItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()

其次编辑spiders下的爬虫文件

# -*- coding: utf-8 -*-import scrapyfrom douban.items import DoubanItemimport jsonclass DoubanMovieSpider(scrapy.Spider):
    name = 'douban_movie'
    allowed_domains = ['movie.douban.com']
    start_urls = ['https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20']
    offset = 0
    def parse(self, response):
        item = DoubanItem()
        content_list = json.loads(response.body.decode())        if (content_list == []):            return
        for content in content_list:
            item['title'] = content['title']
            item['url'] = content['url']            yield item
        self.offset += 20
        url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start='+str(self.offset) + '&limit=20'
        yield scrapy.Request(url=url,callback=self.parse)

response.body 获得数据是<class 'bytes'>型,我们需要转换为str型,response.body.decode()。然后通过json.loads()将字符串装换成json 列表,列表里的元素其实就是dict型。

然后保存数据,编辑pipelines.py

import jsonclass DoubanPipeline(object):
    def open_spider(self,spider):        self.file = open("douban.json","w")        self.num = 0
    def process_item(self, item, spider):        self.num+=1
        content = json.dumps(dict(item),ensure_ascii=False)+'\n'
        self.file.write(content)        return item    def close_spider(self,spider):
        print('一共保存了'+str(self.num)+'条数据')        self.file.close()

在运行前需要设置settings.py

#打开这两个注释:USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.15 Safari/537.36'  #模拟浏览器ITEM_PIPELINES = {   'douban.pipelines.DoubanPipeline': 300,
}   #编辑好管道要记得注册管道#ROBOTSTXT_OBEY = True  注释掉robot协议,不然会报错



作者:韵呀
链接:https://www.jianshu.com/p/ac9547e332da


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消