热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式解析抓取猫眼电影Top100

猫眼电影提供实时票房数据,这个以后玩榜单规则:将猫眼电影库中的经典影片,按照评分和评分人数从高到低综合排序取前100名,每

猫眼电影提供实时票房数据,这个以后玩


榜单规则:将猫眼电影库中的经典影片,按照评分和评分人数从高到低综合排序取前100名,每天上午10点更新。相关数据来源于“猫眼电影库”。




第一步,分析URL,一共有10页,每页10个,观察URL得


http://maoyan.com/board/4?offset=0 最后一个数字为增量,每次加10,第一页为0

#构造10页的地址
base_url = 'http://maoyan.com/board/4?offset={}'
urls = []
for i in range(10):urls.append(base_url.format(10*i))

第二步,分析单个页面


不加headers访问被禁止了,说是恶意访问

#构造headers
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','COOKIE':'__mta=251008569.1536744988778.1536745503768.1536745544944.17; _lxsdk_cuid=165cd22f1a0c8-0ec18267a3a2f5-3c604504-1fa400-165cd22f1a0c8; uuid_n_v=v1; uuid=53511D10B66F11E894F593DFAB82C37F1716AA64EB0848C2BADBC75AA2E23EA6; _csrf=5f3373e2e85bd09c75c54ffbc624db254862d2ceb2dfbeff81eb9fa58e289001; __guid=17099173.3022114119644780000.1536744988414.424; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; _lxsdk=53511D10B66F11E894F593DFAB82C37F1716AA64EB0848C2BADBC75AA2E23EA6; __mta=251008569.1536744988778.1536744999954.1536745003054.4; monitor_count=17; _lxsdk_s=165cd22f1a1-995-e6-849%7C%7C47'
}
def get_onepage(url):response &#61; requests.get(url,headers&#61;headers).textindex &#61; re.findall(&#39;board-index.*?>(.*?)<&#39;,response,re.S)[1:-1]name &#61; re.findall(&#39;

,response,re.S)star &#61; re.findall(&#39;(.*?)

&#39;,response,re.S)date &#61; re.findall(&#39;releasetime">(.*?),response,re.S)img &#61; re.findall(&#39;dd>.*?&#39;,response,re.S)score &#61; re.findall(&#39;score.*?integer">(.*?)<.*?fraction">(.*?)<&#39;,response,re.S)name,star,date,img,score &#61; list(name),list(star),list(date),list(img),list(score)#star和score需要处理一下stars &#61; []for i in star:stars.append(i.split())scores &#61; []for i,j in score:scores.append(i&#43;j)for i in range(10):all_dict[index[i]] &#61; {&#39;index&#39;:index[i],&#39;name&#39;:name[i],&#39;star&#39;:stars[i],&#39;img&#39;:img[i],&#39;date&#39;:date[i]}

最后将score去掉不存&#xff0c;因为第一次成功了&#xff0c;但是今天尽然龙猫那部没有评分了&#xff0c;一页9个就会报错&#xff0c;img的查找有些麻烦&#xff0c;试了好几次&#xff0c;测试中发现img的属性标签会变化位置&#xff0c;与浏览器中看到的顺序不一致。


最后完整代码&#xff0c;爬取10页数据&#xff0c;并将数据打印出来&#xff0c;并写入json文件&#xff0c;重新读取

import requests,re
import jsonbase_url &#61; &#39;http://maoyan.com/board/4?offset&#61;{}&#39;
urls &#61; []
for i in range(10):urls.append(base_url.format(10*i))#构造headers
headers &#61; {&#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36&#39;,&#39;COOKIE&#39;:&#39;__mta&#61;251008569.1536744988778.1536745503768.1536745544944.17; _lxsdk_cuid&#61;165cd22f1a0c8-0ec18267a3a2f5-3c604504-1fa400-165cd22f1a0c8; uuid_n_v&#61;v1; uuid&#61;53511D10B66F11E894F593DFAB82C37F1716AA64EB0848C2BADBC75AA2E23EA6; _csrf&#61;5f3373e2e85bd09c75c54ffbc624db254862d2ceb2dfbeff81eb9fa58e289001; __guid&#61;17099173.3022114119644780000.1536744988414.424; _lx_utm&#61;utm_source%3DBaidu%26utm_medium%3Dorganic; _lxsdk&#61;53511D10B66F11E894F593DFAB82C37F1716AA64EB0848C2BADBC75AA2E23EA6; __mta&#61;251008569.1536744988778.1536744999954.1536745003054.4; monitor_count&#61;17; _lxsdk_s&#61;165cd22f1a1-995-e6-849%7C%7C47&#39;
}
def get_onepage(url):response &#61; requests.get(url,headers&#61;headers).textindex &#61; re.findall(&#39;board-index.*?>(.*?)<&#39;,response,re.S)[1:-1]name &#61; re.findall(&#39;

,response,re.S)star &#61; re.findall(&#39;(.*?)

&#39;,response,re.S)date &#61; re.findall(&#39;releasetime">(.*?),response,re.S)img &#61; re.findall(&#39;dd>.*?&#39;,response,re.S)score &#61; re.findall(&#39;score.*?integer">(.*?)<.*?fraction">(.*?)<&#39;,response,re.S)name,star,date,img,score &#61; list(name),list(star),list(date),list(img),list(score)#star和score需要处理一下stars &#61; []for i in star:stars.append(i.split())scores &#61; []for i,j in score:scores.append(i&#43;j)for i in range(10):all_dict[index[i]] &#61; {&#39;index&#39;:index[i],&#39;name&#39;:name[i],&#39;star&#39;:stars[i],&#39;img&#39;:img[i],&#39;date&#39;:date[i]}all_dict &#61; {}
for i in urls:get_onepage(i)for i in all_dict.items():print(i)with open(&#39;maoyan.json&#39;,&#39;w&#39;,encoding&#61;&#39;utf8&#39;) as f:json.dump(all_dict,f)with open(&#39;maoyan.json&#39;,&#39;r&#39;,encoding&#61;&#39;utf8&#39;) as f:print(json.load(f))

最后&#xff0c;打开json看是没有utf8转码的&#xff0c;不知是编辑器的事吗&#xff1f;

这里写图片描述


在代码里读文件正常

这里写图片描述


json在线格式解析也正常

这里写图片描述


推荐阅读
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • 博主使用代理IP来自于网上免费提供高匿IP的这个网站用到的库frombs4importBeautifulSoupimportrandomimporturllib.re ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了正则表达式python相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 目录爬虫06scrapy框架1.scrapy概述安装2.基本使用3.全栈数据的爬取4.五大核心组件对象5.适当提升scrapy爬取数据的效率6.请求传参爬虫06scrapy框架1. ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了如何使用Java代码通过SimpleDateFormat类来获得只有年月日的Date对象,并解释了在日期格式化和解析过程中需要注意的问题。同时提供了示例代码和异常处理方法。 ... [详细]
  • Python爬取豆瓣数据实现过程解析
    这篇文章主要介绍了Python爬取豆瓣数据实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值, ... [详细]
author-avatar
发的好地方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有