爬虫系列(1)-----python爬取猫眼电影top100榜
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫架构中的HTML下载器、HTML解析器、数据存储器三大模块。
step1:首先打开我们要爬取的网站url:http://maoyan.com/board/4;
step2:简单的分析一下网页的源代码,找到我们要爬取的相关信息,以及信息在html源码中的位置,确定我们的正则表达式;
step3:然后开始构造HTML下载器
def get_one_req(url): try: data=urllib.request.urlopen(url).read().decode('utf-8') return data except urllib.error.URLError as e: if hasattr(e,"code"): print(e.code) if hasattr(e,"reason"): print(e.reason)
step4:然后构造HTML解析器
def parse__one_html(data): pat='<p class="name"><a.*?data-val=.*?>(.*?)</a></p>.*?主演:(.*?)\s</p>.*?上映时间:(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i></p>' res=re.compile(pat,re.S).findall(data) return res
step5:数据存储
df=open('F:/top100.txt','w',encoding='utf-8') for i in range(10):#设置要爬取的页数i url="http://maoyan.com/board/4?offset=0"+str(i*10) data=get_one_req(url) res=parse__one_html(data) for j in range(len(res)): item={ '编号':str(i)+str(j), '名称':res[j][0], '主演':res[j][1].strip(),#删除空字符 '上映时间':res[j][2], '评分':res[j][3]+res[j][4] } df.write(json.dumps(item,ensure_ascii=False)+'\n')#注意编码
完整的代码如下:
import urllib.request import re import urllib.error import json url="http://maoyan.com/board/4?offset=0" #模拟浏览器 headers=("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36") opener=urllib.request.build_opener() opener.addheaders=[headers]#添加报头 urllib.request.install_opener(opener)#设置opner全局化,这样就可以直接调用urllib.request.urlopen() # def get_one_req(url): try: data=urllib.request.urlopen(url).read().decode('utf-8') return data except urllib.error.URLError as e: if hasattr(e,"code"): print(e.code) if hasattr(e,"reason"): print(e.reason) def parse__one_html(data): pat='<p class="name"><a.*?data-val=.*?>(.*?)</a></p>.*?主演:(.*?)\s</p>.*?上映时间:(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i></p>' res=re.compile(pat,re.S).findall(data) return res def main(): df=open('F:/top100.txt','w',encoding='utf-8') for i in range(10):#设置要爬取的页数i url="http://maoyan.com/board/4?offset=0"+str(i*10) data=get_one_req(url) res=parse__one_html(data) for j in range(len(res)): item={ '编号':str(i)+str(j), '名称':res[j][0], '主演':res[j][1].strip(),#删除空字符 '上映时间':res[j][2], '评分':res[j][3]+res[j][4] } df.write(json.dumps(item,ensure_ascii=False)+'\n')#注意编码 #df.close() #print('第'+str(i+1)+'页的内容是:',res) if __name__ =='__main__': main()
最后保存的文件内容如下,大家也可以保存为.csv格式,这样比较方便后期的数据分析和处理。
{"第1页的内容是:名称": "霸王别姬", "主演": "张国荣,张丰毅,巩俐", "上映时间": "1993-01-01(中国香港)", "评分": "9.6"} {"第1页的内容是:名称": "肖申克的救赎", "主演": "蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿", "上映时间": "1994-10-14(美国)", "评分": "9.5"} {"第1页的内容是:名称": "罗马假日", "主演": "格利高利·派克,奥黛丽·赫本,埃迪·艾伯特", "上映时间": "1953-09-02(美国)", "评分": "9.1"} {"第1页的内容是:名称": "这个杀手不太冷", "主演": "让·雷诺,加里·奥德曼,娜塔莉·波特曼", "上映时间": "1994-09-14(法国)", "评分": "9.5"} {"第1页的内容是:名称": "泰坦尼克号", "主演": "莱昂纳多·迪卡普里奥,凯特·温丝莱特,比利·赞恩", "上映时间": "1998-04-03", "评分": "9.5"} {"第1页的内容是:名称": "教父", "主演": "马龙·白兰度,阿尔·帕西诺,詹姆斯·凯恩", "上映时间": "1972-03-24(美国)", "评分": "9.3"} {"第1页的内容是:名称": "龙猫", "主演": "日高法子,坂本千夏,糸井重里", "上映时间": "1988-04-16(日本)", "评分": "9.2"} {"第1页的内容是:名称": "唐伯虎点秋香", "主演": "周星驰,巩俐,郑佩佩", "上映时间": "1993-07-01(中国香港)", "评分": "9.2"} {"第1页的内容是:名称": "千与千寻", "主演": "柊瑠美,入野自由,夏木真理", "上映时间": "2001-07-20(日本)", "评分": "9.3"} {"第1页的内容是:名称": "魂断蓝桥", "主演": "费雯·丽,罗伯特·泰勒,露塞尔·沃特森", "上映时间": "1940-05-17(美国)", "评分": "9.2"} {"第2页的内容是:名称": "喜剧之王", "主演": "周星驰,莫文蔚,张柏芝", "上映时间": "1999-02-13(中国香港)", "评分": "9.2"} {"第2页的内容是:名称": "乱世佳人", "主演": "费雯·丽,克拉克·盖博,奥利维娅·德哈维兰", "上映时间": "1939-12-15(美国)", "评分": "9.1"} {"第2页的内容是:名称": "天空之城", "主演": "寺田农,鹫尾真知子,龟山助清", "上映时间": "1992", "评分": "9.1"} {"第2页的内容是:名称": "大闹天宫", "主演": "邱岳峰,毕克,富润生", "上映时间": "1965-12-31", "评分": "9.0"} {"第2页的内容是:名称": "辛德勒的名单", "主演": "连姆·尼森,拉尔夫·费因斯,本·金斯利", "上映时间": "1993-12-15(美国)", "评分": "9.2"} {"第2页的内容是:名称": "音乐之声", "主演": "朱丽·安德鲁斯,克里斯托弗·普卢默,埃琳诺·帕克", "上映时间": "1965-03-02(美国)", "评分": "9.0"} {"第2页的内容是:名称": "剪刀手爱德华", "主演": "约翰尼·德普,薇诺娜·瑞德,黛安娜·维斯特", "上映时间": "1990-12-06(美国)", "评分": "8.8"} {"第2页的内容是:名称": "春光乍泄", "主演": "张国荣,梁朝伟,张震", "上映时间": "1997-05-30(中国香港)", "评分": "9.2"} {"第2页的内容是:名称": "美丽人生", "主演": "罗伯托·贝尼尼,尼可莱塔·布拉斯基,乔治·坎塔里尼", "上映时间": "1997-12-20(意大利)", "评分": "9.3"} {"第2页的内容是:名称": "黑客帝国", "主演": "基努·里维斯,凯瑞-安·莫斯,劳伦斯·菲什伯恩", "上映时间": "2000-01-14", "评分": "9.0"} {"第3页的内容是:名称": "海上钢琴师", "主演": "蒂姆·罗斯,普路特·泰勒·文斯,比尔·努恩", "上映时间": "1998-10-28(意大利)", "评分": "9.2"} {"第3页的内容是:名称": "指环王3:王者无敌", "主演": "伊利亚·伍德,伊恩·麦克莱恩,丽芙·泰勒", "上映时间": "2004-03-15", "评分": "9.2"} {"第3页的内容是:名称": "加勒比海盗", "主演": "约翰尼·德普,凯拉·奈特莉,奥兰多·布鲁姆", "上映时间": "2003-11-21", "评分": "8.9"} {"第3页的内容是:名称": "哈利·波特与魔法石", "主演": "丹尼尔·雷德克里夫,鲁伯特·格林特,艾玛·沃森", "上映时间": "2002-01-26", "评分": "9.1"} {"第3页的内容是:名称": "射雕英雄传之东成西就", "主演": "张国荣,林青霞,梁朝伟", "上映时间": "1993-02-05(中国香港)", "评分": "8.9"} {"第3页的内容是:名称": "无间道", "主演": "刘德华,梁朝伟,黄秋生", "上映时间": "2003-09-05", "评分": "9.1"}
爬虫的基本思路还是挺好理解的,希望大家一起交流学习。
爬虫系列(1)-----python爬取猫眼电影top100榜的更多相关文章
- python 爬取猫眼电影top100数据
最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...
- # [爬虫Demo] pyquery+csv爬取猫眼电影top100
目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.co ...
- 50 行代码教你爬取猫眼电影 TOP100 榜所有信息
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫 ...
- 40行代码爬取猫眼电影TOP100榜所有信息
主要内容: 一.基础爬虫框架的三大模块 二.完整代码解析及效果展示 1️⃣ 基础爬虫框架的三大模块 1.HTML下载器:利用requests模块下载HTML网页. 2.HTML解析器:利用re正则表 ...
- Python爬虫项目--爬取猫眼电影Top100榜
本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...
- Python爬取猫眼电影100榜并保存到excel表格
首先我们前期要导入的第三方类库有; 通过猫眼电影100榜的源码可以看到很有规律 如: 亦或者是: 根据规律我们可以得到非贪婪的正则表达式 """<div class ...
- 爬虫练习之正则表达式爬取猫眼电影Top100
#猫眼电影Top100import requests,re,timedef get_one_page(url): headers={ 'User-Agent':'Mozilla/5.0 (Window ...
- Requests+正则表达式爬取猫眼电影(TOP100榜)
猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...
- python爬取猫眼电影top100
最近想研究下python爬虫,于是就找了些练习项目试试手,熟悉一下,猫眼电影可能就是那种最简单的了. 1 看下猫眼电影的top100页面 分了10页,url为:https://maoyan.com/b ...
随机推荐
- Servlet和Filter生命周期
1. 生命周期 1.1. Servlet生命周期 servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.s ...
- webstorm修改工具栏主题
** 操作如图所示 **
- js,获取和设置cookie、 localStorage
cookie 跟域名有关系的浏览器缓存 获取cookie document.cookie; 获取到的如果是多条cookie信息,是以分号和一个空格("; ")隔开:a=1; b=2 ...
- 在linux上安装dotnetcore
dotnet core已经出来有一段时间了,不是什么新名词了.但这个技术,目前还是比较新的,企业也没有普遍应用.它最大的亮点就是跨平台,也就是我们写的c#代码,可以运行在linux上. 在国内学习do ...
- C++学习-9
友元主要用于访问私有变量,友元函数跟所在位置的权限没有任何关系friend+函数声明 友元类通常设计为一种对数据操作或类之间传递消息的辅助类(注意一下顺序) Explicit就是要求严格的匹配,不允许 ...
- C++学习-8
1.注意:函数指针前面*,&都是一样的没啥实际意义,除了把实例化函数块的时候,需要指针或者引用修饰 cout << typeid(my1.show).name() <& ...
- 解决JSON.stringify()自动将中文转译成unicode的方法
最近在工作中,发现在IE8下JSON.stringify()自动将中文转译为unicode编码,原本选择的中文字符,传到后台变为了unicode编码,即\u****的形式.查找资料后发现,与标准的JS ...
- S/4 HANA中的ACDOCT和FAGLFLEXT
最近的几个需求让我对ACDOCT和FAGLFLEXT这两个财务相关表(准确地说是视图)产生了一些了解,同时也发现某些开发同行和业务顾问并没有认识到这些东西.因此打算从技术角度来说明一下这两个视图在S4 ...
- json字符串对象内嵌json对象
有时候需要在json的key:value字符串对象中再嵌入一个json对象,如果需要把如下的json对象作为字符串嵌入到json字符串对象中: { "type": 2, " ...
- Maven-12: 插件解析机制
1. 插件仓库 2. 插件的默认groupId 3. 解析插件版本 4. 解析插件前缀