爬虫练习------利用scrapy 爬取爱奇艺

本次练习利用scrapy 爬取了爱奇艺爱情电影(小伙伴可以自行修改爬取其他类型电影)
学习到的主要内容是

  • 1.对scrapy 框架中的yield 生成器有了进一步的思考,可以通过它来实现翻页操作
  • 2.关于基础url 的搭建,常用的是format/urlencode/占位符
  • 3.重点:学习到如何在pipline 中进行配置,将爬取的内容存储为excel格式

下面是代码各模块文件的截图位置


文件位置

本次主要的程序在四大模块里

1.主程序----lovemovie.py
2.items.py
3.pipliens.py
4.settings.py

具体代码和需要修改的(settings.py)如下:

1.主程序---lovemovie.py

import scrapy
from scrapy import Spider,Request
from aiqiyi.settings import *
import logging
from logging import getLogger
import json
from urllib.parse import urlencode#可以将参数通过&链接到一起
from aiqiyi.items import *


class LovemovieSpider(Spider):
    name = 'lovemovie'
    allowed_domains = ['list.iqiyi.com']
    start_urls = ['https://list.iqiyi.com/']




    def start_requests(self):
        base_url='https://pcw-api.iqiyi.com/search/video/videolists?'
        for page in range(1, self.settings.get('PAGE') + 1):
            params={
                'access_play_control_platform': '14',
                'channel_id': '1',
                'data_type': '1',
                'from': 'pcw_list',
                'mode': '11',
                'pageNum':page,
                'pageSize': '48',
                'site': 'iqiyi',
                'three_category_id': '6;must',
                'without_qipu': '1'
            }
            url = base_url + urlencode(params)
            yield Request(url,callback=self.parse)#迭代器的作用是可以实现翻页




    def parse(self, response):
        """

        :param response: 迭代的请求
        :return: 所有的解析数据
        """
        result=json.loads(response.text)
        if result.get('data').get('list'):#开始解析
            items=result.get('data').get('list')
            aiqiyifilm_info=AiqiyiItem()#首先实例化item.py 模块
            for item in items:
                aiqiyifilm_info['film_description']=item.get('description')
                aiqiyifilm_info['full_time'] = item.get('duration')
                aiqiyifilm_info['formatperiod'] = item.get('formatPeriod')
                aiqiyifilm_info['film_name'] = item.get('name')
                aiqiyifilm_info['play_url'] = item.get('playUrl')
                aiqiyifilm_info['score'] = item.get('score')
                aiqiyifilm_info['actors'] = item.get('secondInfo')
                yield aiqiyifilm_info#运行后会在terminal 端进行,随后将内容在pipline模块内进行保存

2.itmes.py

import scrapy
from scrapy import Item,Field


class AiqiyiItem(Item):
    film_description=Field()#电影描述
    full_time=Field()#影片时长
    formatperiod=Field()#上映时间
    film_name=Field()#电影名称
    play_url=Field()#播放连接
    score=Field()#分数
    actors=Field()#主演名称

3.pipline.py(process_item 函数名称是固定的,最好不要修改)

from openpyxl import Workbook#注意是大写


class ExcelPipeline(object):
    def __init__(self):
        self.wb=Workbook()#实例化
        self.ws=self.wb.active#激活
        self.ws.append(['故事梗概','电影时长','上映时间','电影名字','播放链接','电影评分','主演名字'])


    def process_item(self,item,spider):#这里的参数spider 实际上是Spider的实例,item就是主程序中的aiqiyifilm_info,模块自动识别为item
        line=[item['film_description'],item['full_time'],item['formatperiod'],item['film_name'],item['play_url'],item['score'],item['actors']]
        self.ws.append(line)
        self.wb.save('aiqiyi_film.xlsx')
        return item #pipline 必须返回迭代对象,或者异常值

4.settings.py


开通管道
爬取爱情电影页数--当时爬取只有19页

本例子还算比较简单,没有反爬,无需验证,后续还会不断练习

你可能感兴趣的:(爬虫练习------利用scrapy 爬取爱奇艺)