(伪)Python爬取猫眼电影(反反爬虫过程中遇到的坑)

Python爬取猫眼电影

1.打开一个猫眼电影的URL,例如本月的较火的电影《毒液:致命守护者》http://maoyan.com/films/42964

直接F12,查看审核元素,发现上面的数据都是方框无法正确显示

选择Network,刷新之后,选择第一个42964,查看右侧Preview

也是无法显示,这就是反爬虫策略,主要爬取网上也有很多教程可供参考,我就贴几个

他们都写得非常好,很有参考价值

https://www.cnblogs.com/h2zZhou/p/7248261.html

https://blog.csdn.net/qq_31032181/article/details/79153578

https://mp.weixin.qq.com/s/wuwWnzJ85BKRV1mArwi57w

可以直接参考他们写得文章,然后爬取吧!

后文主要我写一下我遇到的难点,或者坑?

2.

利用这个网站,打开woff文件。 http://fontstore.baidu.com/static/editor/index.html

我们需要一个参考的base.woff

请求猫眼电影的woff文件,自己构建一个映射list,上下对应关系,对应顺序看你爬下来的woff文件

按照我的理解是通过

maoyan_font = TTFont('maoyan.woff')#爬取时的文件,为了找对应关系
maoyanGlyph = maoyan_font['glyf'][maoyan_unicode_list[i]]
#和
base_font = TTFont('base.woff')#你构建的woff
baseGlyph = base_font['glyf'][base_unicode_list[j]]

#通过这两者返回的
<fontTools.ttLib.tables._g_l_y_f.Glyph object at 0x...>
判断是否相等,相等就是你再次获取woff文件时之间的对应关系
之后网页上的那串乱码就是通过这个对应关系,找出相应的数字

找出这样的对应关系

https://mp.weixin.qq.com/s/wuwWnzJ85BKRV1mArwi57w 

有段代码是

if unit:
        bom = ['分', score[0].get_text().replace('.', '').replace('万', ''), unit[0].get_text()]
        for i in range(len(mw)):
            moviewish = mw[i].get_text().encode('utf-8')
            moviewish = str(moviewish, encoding='utf-8')
            # 通过比对获取反爬文字信息
            for j in range(len(utf8last)):
                moviewish = moviewish.replace(utf8last[j], maoyan_num_list[j])
            if i == 0:
                data["score"] = moviewish + bom[i]
            elif i == 1:
                if '万' in moviewish:
                    data["people"] = int(float(moviewish.replace('万', '')) * 10000)
                else:
                    data["people"] = int(float(moviewish))
            else:
                if '万' == bom[i]:
                    data["box_office"] = int(float(moviewish) * 10000)
                else:
                    data["box_office"] = int(float(moviewish) * 100000000)
    else:

在moviewish那里,不知道为什么我运行失败。。。。晕

 

可能是我技术太差,编码还是不太懂,那段代码看的我晕,我走了一个取巧的方法

原来的运行应该是:

moviewish = mw[i].get_text().encode('utf-8')
print(moviewish,len(moviewish))
                
moviewish = str(moviewish, encoding='utf-8')
print(moviewish,len(moviewish))

结果是:

加了一行:

moviewish = mw[i].get_text().encode('utf-8')
print(moviewish,len(moviewish))

moviewish = str(moviewish, encoding='utf-8')
print(moviewish,len(moviewish))


moviewish = '%r' % moviewish
print(moviewish,len(moviewish))

字符串长度改变了,这样就可以使用replace替换为数字,因为之前搞定了映射关系

这不过又出现了一个问题

字符串套字符串,我去那怎么办,好吧这只能字符串切片了

moviewish = moviewish[1:-1]

最后的结果:

完美!

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值