scrapy爬取猫眼电影破解加密文字,数据存入mysql数据库,渲染页面及分页功能!!!开源免费!

一、工具:

scrapy框架
numpy

PIL : Image, ImageDraw, ImageFont
fontTools.ttLib :TTFont
lxml : html

二、分析过程:

1、列表页面
因为想要把想要的数据渲染,所以不能只爬取一个页面的数据,从列表跳转到详情页面 要传递id值,确保跳转到指定详情页面:列表页面需要获取的数据如下:

在这里插入图片描述

2、详情页面
详情页面需要获取的数据如下:加密部分需要单独处理

在这里插入图片描述

先把数据库的字段拿过来,明确要获取的数据
items.py

class MyfilmItem(scrapy.Item):
    table = "mydy"
    film_id = scrapy.Field()  # 电影id
    thumb = scrapy.Field()  # 电影缩略图
    cname = scrapy.Field()  # 电影中文名
    time = scrapy.Field()  # 上映时间
    score = scrapy.Field()  # 用户评分
    score_num = scrapy.Field()  # 评分人数  
    ticketNumber = scrapy.Field()  # 票房数
    ename = scrapy.Field()  # 电影英文名
    length = scrapy.Field()  # 电影时长
    tickets_unit = scrapy.Field()  # 票房单位  
    type = scrapy.Field()  # 电影类型

开始获取数据,因为总是302 301的错误,获取不到页面,需要重写url,头信息和cookie的值要写全,完全正确,settings中COOKIES_ENABLED = False 开启cookie
参考文档:https://blog.csdn.net/qq_38949193/article/details/81410582
去重scrapy 在迭代爬取时被拒 offsite 增加dont_filter=True
参考地址:https://www.cnblogs.com/yijiaming/p/9759027.html

cookie还是一样的 先找哪些是猫眼要的值,再加全!

cookies = {
   
        "_csrf":"查看浏览器中你自己的cookie对应值",
        "_lxsdk":"查看浏览器中你自己的cookie对应值",
        "_lxsdk_cuid":"查看浏览器中你自己的cookie对应值",
        "mojo-uuid":"查看浏览器中你自己的cookie对应值",
        "uuid":"查看浏览器中你自己的cookie对应值",
        "uuid_n_v":"v1"
    }

在这里插入图片描述
获取数据id值需要注意一下,一个是跳转页面用,一个试传递id值

获取下一页 获取当前所处页数,是否有下一页
在这里插入图片描述
在这里插入图片描述
只要数字,需要处理str().splice("_")[1]
获取下一页拼接路径,拼接下一页访问地址
电影类型试多个,在列表里,需要转一下。电影时长有下一行等符号,需要转str处理 跟之前获取评论时候处理数据一样
获取详情需要解密部分数据参考地址:http://ddrv.cn/a/191931

思路:

先请求页面的字体下载,之前做的大众点评是就那几种字体下载完循环用就行,这个是要访问一次下载一个,下载之后整理对应的字典,下载之后保存到自己的项目中,再打开保存好的字体文件,用绘制的方法绘制成图片,打开图片再获取绘制好的图片的文字。形成数字与字符的字典,获取页面中字符,判断字符在字典中进行替换,得到想要的加密数据:
总结:在原来大众点评获取字体的基础上加上绘图再识别绘图文字,进行对比!

上代码:

maoyan.py

# -*- coding: utf-8 -*-
import json
import numpy
import os
import re

import requests
import scrapy
from PIL import Image, ImageDraw, ImageFont
from fontTools.ttLib import TTFont
from lxml import html
# 创建etree模块
from pytesseract import image_to_string

from myfilm import settings
from myfilm.items import MyfilmItem

etree = html.etree
from scrapy import Request


class MaoyanSpider(scrapy.Spider):
    name = 'maoyan'
    allowed_domains = ['maoyan.com']
    # start_urls = ['http://maoyan.com/']
    fontstr = ""#定义一个字体文件的字符串
    headers = {
   
    #此处为你自己的浏览器版本
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"
    }
    #cookie的值上面有相应需求整理,我放到了settings中
    cookies = settings.cookies

    def start_requests(self):
        '''
        重写start_requests函数
        :return:
        '''
        urllist = [
            'https://maoyan.com/films?showType=3'
        ]
        for url in urllist:
            yield Request(url=url,headers=self.headers, cookies=self.cookies, callback=self.parse)

    def parse(self, response):
        '''
        解析电影列表页面
        :param response:
        :return:
        '''
        ##获取列表
        ddlist = response.xpath("//div[@class='container']//div[@class='movies-panel']//dl[@class='movie-list']//dd")
        ##遍历获取每个电影的信息
        for dd in ddlist:
            filmdic = {
   
                "id": dd.xpath(".//div[@class='movie-item']//a//@href").get() or "",
                "film_id": str(dd.xpath(".//div[@class='movie-item']//a//@href").get()).split('/')[2] or "",
                "cname": dd.xpath(".//div[contains(@class,'movie-item-title')]//a//text()").get() or "null",
                "thumb": dd.xpath(".//div[@class='movie-item']//a//img[last()]//@data-src").get() or "default",
                "score": dd.xpath(".//div[contains(@class,'channel-detail-orange')]//text()").get() or "0",
            }
            # print("filmdic=====",filmdic)
          
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值