对于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榜的更多相关文章

  1. python 爬取猫眼电影top100数据

    最近有爬虫相关的需求,所以上B站找了个视频(链接在文末)看了一下,做了一个小程序出来,大体上没有修改,只是在最后的存储上,由txt换成了excel. 简要需求:爬虫爬取 猫眼电影TOP100榜单 数据 ...

  2. # [爬虫Demo] pyquery+csv爬取猫眼电影top100

    目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.co ...

  3. 50 行代码教你爬取猫眼电影 TOP100 榜所有信息

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫 ...

  4. 40行代码爬取猫眼电影TOP100榜所有信息

    主要内容: 一.基础爬虫框架的三大模块 二.完整代码解析及效果展示 1️⃣  基础爬虫框架的三大模块 1.HTML下载器:利用requests模块下载HTML网页. 2.HTML解析器:利用re正则表 ...

  5. Python爬虫项目--爬取猫眼电影Top100榜

    本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构,  ...

  6. Python爬取猫眼电影100榜并保存到excel表格

    首先我们前期要导入的第三方类库有; 通过猫眼电影100榜的源码可以看到很有规律 如: 亦或者是: 根据规律我们可以得到非贪婪的正则表达式 """<div class ...

  7. 爬虫练习之正则表达式爬取猫眼电影Top100

    #猫眼电影Top100import requests,re,timedef get_one_page(url): headers={ 'User-Agent':'Mozilla/5.0 (Window ...

  8. Requests+正则表达式爬取猫眼电影(TOP100榜)

    猫眼电影网址:www.maoyan.com 前言:网上一些大神已经对猫眼电影进行过爬取,所用的方法也是各有其优,最终目的是把影片排名.图片.名称.主要演员.上映时间与评分提取出来并保存到文件或者数据库 ...

  9. python爬取猫眼电影top100

    最近想研究下python爬虫,于是就找了些练习项目试试手,熟悉一下,猫眼电影可能就是那种最简单的了. 1 看下猫眼电影的top100页面 分了10页,url为:https://maoyan.com/b ...

随机推荐

  1. WORD分栏后左右都能编辑

    操作如下: 如果是office的请参照:https://zhidao.baidu.com/question/403577041.html 如果是WPS:1.点击插入,有一个分页,点击之后下面有一个可选 ...

  2. 2018java平均工资,想转行学java的快点上车

    很多人选择工作的原因很简单:要么有钱,要么自己开心,当然绝大多数人是既没有钱也不开心...(现实就是这么残酷).哪有钱多事少的活,请告诉我,我第一个去!!我想大部分人对java充满好奇的一个原因就是钱 ...

  3. Java最大公约数和最小公倍数的求法(辗转相除法)

    这道题计算了三个数的最小公倍数 import java.util.Scanner; public class D { public static int gcd(int a,int b) { int ...

  4. PAT乙级-1063. 计算谱半径(20)

    在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的n个复数空间的特征值{a1+b1i, ..., an+bni},它们的模为实部与虚部的平方和的开方,而&q ...

  5. 题目1031:xxx定律

    题目描述: 对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止. 请计算需要经过几步才能将n变到1,具体可见样例. 输入: 测试包含多个用例,每 ...

  6. 【Unity3D与23种设计模式】游戏的主循环——Game Loop

    游戏与其他软件最大的不同 就是游戏有Update逻辑 一般的软件是由"事件"驱动 因为它不会突然跑出来一只"兔子" 因此,只有游戏才有"帧" ...

  7. mui实现切换选项卡

    mui切换选项卡头目对应选项内容是webAPP应用最多的功能 引入mui文件: 引入mui-segmented-control类实现顶部头目: 引入mui-content-padded类加入各选项卡内 ...

  8. SDP(13): Scala.Future - far from completion,绝不能用来做甩手掌柜

    在前面几篇关于数据库引擎的讨论里很多的运算函数都返回了scala.Future类型的结果,因为我以为这样就可以很方便的实现了non-blocking效果.无论任何复杂的数据处理操作,只要把它们包在一个 ...

  9. shell脚本之for循环

    shell脚本之for循环 author :headsen  chen       2017-10-18    09:50:41 个人原创,转载请注明.否则依法追究法律责任 1,cat forloop ...

  10. Online Judge(OJ)搭建——4、具体实现

    代码编译.运行.保存: 本系统目前支持 Java.C++ 的编译.如有其他语言需要编译,扩展也很简单,因为这里使用了一个抽象类LanguageTest,处理好代码运行编译之前的文件保存,代码运行之中的 ...