使用scrapy爬取豆瓣电影top 250

该博客介绍了如何使用Scrapy爬虫框架爬取豆瓣电影Top250的电影信息,包括电影排名、名称、导演、评分和海报图片。爬虫首先遍历初始URL,提取每部电影的详细信息,然后通过正则表达式匹配导演名称。同时,爬虫还进一步请求每部电影的详情页,抓取导演信息。最后,配置了ImagesPipeline来下载并存储海报图片,结果导出到CSV文件,并展示了部分爬取结果。
摘要由CSDN通过智能技术生成

爬取链接:https://movie.douban.com/top250
这里偷个懒,直接在之前创建好的项目文件里创建爬虫文件,创建命令“scrapy genspider douban douban.com”,创建douban.py文件
如果不知道如何创建项目文件的话,可以参考这篇文章Scrapy爬虫框架
爬虫文件的代码如下:

import scrapy
from baiduSpider.items import BaiduspiderItem
import re

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls=['https://movie.douban.com/top250']
    # start_urls = ['https://movie.douban.com/top250?start='+str(i) for i in range(0, 100, 25)]  #爬取链接


    def parse(self, response):  # 解析爬取到页面的方法
        for row in response.xpath('//*[@id="content"]/div/div/ol/li/div'):  # 循环逐行从列表中获取每个链接
            # print(row)
            item = BaiduspiderItem()  # 实例化
            item['rank'] = row.xpath("div[1]/em/text()").get()  #排名
            item['name'] = row.xpath("div[2]/div[1]/a/span[1]/text()").get()  # 电影名

            director= row.xpath("div[2]/div[2]/p[1]/text()[1]").get().strip() # 导演
            item['director'] = re.findall(r"导演: (.*?)   主演:",director)  #正则匹配,只提取导演的名字

            item['score'] = row.xpath("div[2]/div[2]/div/span[2]/text()").get()  # 评分
            item['url'] = row.xpath("div[1]/a/img/@src").get()  # 海报图url
            yield item

        next_url=response.xpath('//*[@id="content"]/div/div[1]/div[2]/span[3]/a')
        if next_url:
            next_url="https://movie.douban.com/top250"+next_url.xpath("@href").get()
        yield scrapy.Request(next_url,callback=self.parse)

items文件的代码如下:

rank = scrapy.Field()
name = scrapy.Field()
director = scrapy.Field()
score = scrapy.Field()
url=scrapy.Field()

最后输入命令运行爬虫文件:scrapy crawl douban -o douban.csv
最终得到的结果如下:
在这里插入图片描述
顺路一哈把电影的图片进行爬取一下
爬虫文件

class DoubanSpider(scrapy.Spider):
    name = 'douban2'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        img_list = []
        for row in response.xpath('//*[@id="content"]/div/div[1]/ol/li/div'):
            # print(row)
            item = BaiduspiderItem()    #实例化
            item['name'] = row.xpath("div[2]/div/a/span[1]/text()").extract()[0]   #获取电影名
            item['img']= row.xpath("div[1]/a/img/@src").getall()   #图片链接
            # img_list.append(img)
            # # # print()
            # item['img'] = img_list
            # print(item['img'])
            item['url'] = row.xpath("div/a/@href").extract()[0]   #电影链接
            yield scrapy.Request(item['url'], meta={'item': item}, callback=self.parse_detail)
        #爬取250条的
        next_url = response.xpath("//span[@class='next']/a")
        if next_url:
            next_url = "https://movie.douban.com/top250" + next_url.xpath("@href").get()
            yield scrapy.Request(next_url, callback=self.parse)
    def parse_detail(self, response):
        item = response.meta['item']
        item['bj'] = response.xpath("//div[@id='info']/span[2]/span[2]/a/text()").get()   #导演
        yield item

settings.py

ITEM_PIPELINES = {
#可以设置多个,逗号分割。1为优先级,数值越小,...优先级越高
    'scrapy.pipelines.images.ImagesPipeline': 1,
}
IMAGES_STORE = 'd:\\doubanimg'   #图片保存路径
IMAGES_URLS_FIELD = 'img'   #对应item里面设定的字段,取到图片的url
FEED_EXPORT_FIELDS = ["name","bj","img","url"]

结果:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值