Python 采用Scrapy爬虫框架爬取豆瓣电影top250

本文介绍如何使用Scrapy框架进行网页爬取,从项目创建到数据抓取及处理全流程解析,并附带实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scrapy 简介

这里写图片描述

在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装。

注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围,请自行了解)

这里写图片描述

scrapy 爬取网页

scrapy 不同于简单的单线程爬虫,采用scrapy
框架写python爬虫需要生成许多个文件,这一件类似于java里面的web框架,许多工作都可以通过一些配置文件来完成。

##1.通过命令行方式生成一个Scrapy project:

这里写图片描述

在安装有Python环境的window主机下,打开命令窗口,通过 scrapy startproject doubanTest
就是可以生成一个Scrapy project。project的文件结构如下:

这里写图片描述

2.scrapy 文件结构

Item.py 定义需要抓取并需要后期处理的数据
这里写图片描述

Pipeline.py 用于存放执行后期数据处理的功能,从而使得数据的爬取和处理分开。
这里写图片描述

setting.py 用于配置Scrapy,从而修改user-agent,设定爬取时间间隔,设置代理,配置各种中间件等等。
这里写图片描述

3.需要爬取的内容

首先我们打开豆瓣电影TOP250
这里写图片描述

我们需要爬取的是上图中用红色方框框出的几项网页信息,包括电影名、电影介绍、评分、评论人数、经典的话。通过查看源码我们可以找到对应的位置,这里不详述,详见code。

4.code分析
(1)Item.py
上面提到了Item的功能,就是定义要抓取的数据

from scrapy import Item, Field

class DoubanmovieItem(Item):
    title = Field()#电影名
    movieInfo = Field()#电影介绍
    star = Field()#评分
    critical = Field()#评分人数
    quote = Field()#经典的话

(2)pipline.py
这里我们没有对Item中的数据做特殊处理,所以采用默认代码

class DoubanmoviePipeline(object):
    def process_item(self, item, spider):
        return item

(3)setting.py

BOT_NAME = 'doubanmovie'

SPIDER_MODULES = ['doubanmovie.spiders']
NEWSPIDER_MODULE = 'doubanmovie.spiders'
#设置代理,有些网站是反爬虫,所以要将其伪装成浏览器
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
# USER_AGENT = 'doubanmovie (+http://www.yourdomain.com)'
FEED_URI = u'file:///F:/douban.csv'#文件保存路径
FEED_FORMAT = 'CSV'#保存为CSV文件

(4)爬虫主程序
在生成的项目文件下,有一个spiders目录,这里就是放置我们爬虫主程序的地方,在这个文件下生成一个python文件,也就是我们要实现的功能

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import CrawlSpider
from scrapy.http import Request
from scrapy.selector import Selector
from doubanmovie.items import DoubanmovieItem


class Douban(CrawlSpider):  # Douban是一个类,继承自CrawlSpider
    name = "douban"  # 爬虫命名
    start_urls = ['http://movie.douban.com/top250']  # 要爬取的页面地址
    #url = 'http://movie.douban.com/top250'

    def parse(self, response):
        # print response.body
        item = DoubanmovieItem()
        selector = Selector(response)
        Movies = selector.xpath('//div[@class="info"]')
        for eachMoive in Movies:
            title = eachMoive.xpath('div[@class="hd"]/a/span/text()').extract()
            fullTitle = ''
            for each in title:
                fullTitle += each
            movieInfo = eachMoive.xpath('div[@class="bd"]/p/text()').extract()
            star = eachMoive.xpath('div[@class="bd"]/div[@class="star"]/span/text()').extract()[0]
            critical = eachMoive.xpath('div[@class="bd"]/div[@class="star"]/span/text()').extract()[1]
            quote = eachMoive.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()
            # quote可能为空,因此需要先进行判断
            if quote:
                quote = quote[0]
            else:
                quote = ''
            item['title'] = fullTitle
            item['movieInfo'] = ';'.join(movieInfo)
            item['star'] = star
            item['critical'] = critical
            item['quote'] = quote
            yield item  # 提交生成csv文件
        nextLink = selector.xpath('//span[@class="next"]/link/@href').extract()
        # 第10页是最后一页,没有下一页的链接
        if nextLink:
            nextLink = nextLink[0]
            print nextLink
            yield Request(self.url + nextLink, callback=self.parse)
            # 递归将下一页的地址传给这个函数自己,在进行爬取

(5)运行爬虫
不同于简单单线程爬虫程序直接运行,这里我们还需要通过一个main.py来运行,需要自己手动生成,main.py代码如下:

from scrapy import cmdline
cmdline.execute("scrapy crawl douban".split())

(6)最终结果
这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值