Scrapy爬取天天美剧封面照及剧集下载地址

其实我只是想试试爬取图片而已,先看看网页,需要爬的地方有两个,一是封面图,二是下载地址,挺简单的

Item定义:

import scrapy

class TiantianmeijuItem(scrapy.Item):
    name = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()
    image_paths = scrapy.Field()
    episode = scrapy.Field()
    episode_url = scrapy.Field()

name是保存名字

image_urls和images 是爬取图片的pipeline用的,一个是保存图片URL,一个是保存图片存放信息

image_paths其实没什么实际作用,只是记录下载成功的图片地址

epiosde和episode_url是保存集数和对应下载地址

Spider:

import scrapy
from tiantianmeiju.items import TiantianmeijuItem 
import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding(‘utf-8‘)

class CacthUrlSpider(scrapy.Spider):
    name = ‘meiju‘
    allowed_domains = [‘cn163.net‘]
    start_urls = ["http://cn163.net/archives/{id}/".format(id=id) for id in [‘16355‘, ‘13470‘, ‘18766‘, ‘18805‘]]
            
    def parse(self, response):
        item = TiantianmeijuItem()
        item[‘name‘] = response.xpath(‘//*[@id="content"]/div[2]/div[2]/h2/text()‘).extract()
        item[‘image_urls‘] = response.xpath(‘//*[@id="entry"]/div[2]/img/@src‘).extract()
        item[‘episode‘] = response.xpath(‘//*[@id="entry"]/p[last()]/a/text()‘).extract()
        item[‘episode_url‘] = response.xpath(‘//*[@id="entry"]/p[last()]/a/@href‘).extract()
        yield item

页面比较简单

Pipelines:这里写了两个管道,一个是把下载链接保存到文件,一个是下载图片

import json
import os
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem
from scrapy.http import Request
from settings import IMAGES_STORE

class TiantianmeijuPipeline(object):
    def process_item(self, item, spider):
        return item
    
    
class WriteToFilePipeline(object):  
    def process_item(self, item, spider):
        item = dict(item)
        FolderName = item[‘name‘][0].replace(‘/‘, ‘‘)  
        downloadFile = ‘download_urls.txt‘
        with open(os.path.join(IMAGES_STORE, FolderName, downloadFile), ‘w‘) as file:
            for name,url in zip(item[‘episode‘], item[‘episode_url‘]):
                file.write(‘{name}: {url}\n‘.format(name=name, url=url))
        return item
    
class MyImagesPipeline(ImagesPipeline):  
    def get_media_requests(self, item, info):
        for image_url in item[‘image_urls‘]:
            yield Request(image_url, meta={‘item‘: item})
              
    def item_completed(self, results, item, info):
        image_paths = [x[‘path‘] for ok,x in results if ok]
        if not image_paths:
            raise DropItem("Item contains no images")
        item[‘image_paths‘] = image_paths
        return item
    
    def file_path(self, request, response=None, info=None):
        item = request.meta[‘item‘]
        FolderName = item[‘name‘][0].replace(‘/‘, ‘‘)
        image_guid = request.url.split(‘/‘)[-1]
        filename = u‘{}/{}‘.format(FolderName, image_guid)
        return filename

get_media_requests和item_completed,因为默认的图片储存路径是

<IMAGES_STORE>/full/3afec3b4765f8f0a07b78f98c07b83f013567a0a.jpg,

我需要把full改成以美剧名字目录来保存,所以重写了file_path

settings打开pipelines相关配置:

ITEM_PIPELINES = {
    ‘tiantianmeiju.pipelines.WriteToFilePipeline‘: 2,
    ‘tiantianmeiju.pipelines.MyImagesPipeline‘: 1,
}
IMAGES_STORE = os.path.join(os.getcwd(), ‘image‘)   # 图片存储路径
IMAGES_EXPIRES = 90
IMAGES_MIN_HEIGHT = 110
IMAGES_MIN_WIDTH = 110

爬下来之后就是这个效果了:

时间: 2025-01-31 18:48:31

Scrapy爬取天天美剧封面照及剧集下载地址的相关文章

Scrapy分布式爬虫打造搜索引擎——(二) scrapy 爬取伯乐在线

1.开发环境准备 1.爬取策略 目标:爬取“伯乐在线”的所有文章 策略选择:由于“伯乐在线”提供了全部文章的索引页 ,所有不需要考虑url的去重方法,直接在索引页开始,一篇文章一篇文章地进行爬取,一直进行到最后一页即可. 索引页地址:http://blog.jobbole.com/all-posts/ 2. 搭建python3虚拟环境 打开cmd,进入命令行,输入workon,查看当前存在的虚拟环境:  workon 为爬虫项目,新建python3虚拟环境: mkvirtualenv -p py

Scrapy爬取美女图片 (原创)

有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用python爬取慕课网的视频,是根据爬虫的机制,自己手工定制的,感觉没有那么高大上,所以我最近玩了玩 python中强大的爬虫框架Scrapy. Scrapy是一个用 Python 写的 Crawler Framework ,简单轻巧,并且非常方便.Scrapy 使用 Twisted 这个异步网络库来处理

Scrapy爬取美女图片续集 (原创)

上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scrapy官方文档的过程中,发现Scrapy自身实现了图片和文件的下载功能,不需要咱们之前自己实现图片的下载(不过原理都一样). 在官方文档中,我们可以看到下面一些话:Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的 item pipelines .

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有

scrapy爬取斗图表情

用scrapy爬取斗图表情,其实呀,我是运用别人的博客写的,里面的东西改了改就好了,推存链接" http://www.cnblogs.com/jiaoyu121/p/6992587.html " 首先建立项目:scrapy startproject doutu 在scrapy框架里先写自己要爬取的是什么,在item里面写. import scrapyclass DoutuItem(scrapy.Item): # define the fields for your item here

Scrapy爬取美女图片第三集 代理ip(上) (原创)

首先说一声,让大家久等了.本来打算520那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复了一些bug(现在肯定有人会说果然是单身狗). 好了,废话不多说,咱们进入今天的主题.上两篇 Scrapy爬取美女图片 的文章,咱们讲解了scrapy的用法.可是就在最近,有热心的朋友对我说之前的程序无法爬取到图片,我猜应该是煎蛋网加入了反爬虫机制.所以今天讲解的就是突破反爬虫机制的上篇 代理

scrapy爬取西刺网站ip

# scrapy爬取西刺网站ip # -*- coding: utf-8 -*- import scrapy from xici.items import XiciItem class XicispiderSpider(scrapy.Spider): name = "xicispider" allowed_domains = ["www.xicidaili.com/nn"] start_urls = ['http://www.xicidaili.com/nn/']

Scrapy爬取慕课网(imooc)所有课程数据并存入MySQL数据库

爬取目标:使用scrapy爬取所有课程数据,分别为 1.课程名 2.课程简介 3.课程等级 4.学习人数 并存入MySQL数据库  (目标网址  http://www.imooc.com/course/list) 一.导出数据文件到本地 1.新建imooc项目 1 scrapy startproject imooc 2.修改 items.py,添加项目item 1 from scrapy import Item,Field 2 class ImoocItem(Item): 3 Course_na

scrapy爬取豆瓣电影top250

1 # -*- coding: utf-8 -*- 2 # scrapy爬取豆瓣电影top250 3 4 import scrapy 5 from douban.items import DoubanItem 6 7 8 class DoubanspiderSpider(scrapy.Spider): 9 name = "doubanspider" 10 # allowed_domains = ["movie.douban.com/top250"]注意这里的主页限制