爬虫练习之爬取豆瓣电影TOP250的电影名称

首先感谢【小甲鱼】极客Python之效率革命。讲的很好,通俗易懂,适合入门。

感兴趣的朋友可以访问https://fishc.com.cn/forum-319-1.html来支持小甲鱼。谢谢大家。
话不多说。直接上代码。
豆瓣TOP250电影第一页链接 https://movie.douban.com/top250?start=0&filter=
第10页链接 https://movie.douban.com/top250?start=225&filter=
我们分析该地址,很快就能找到规律:

  • https:// 代表资源传输协议使用https协议;
  • movie.douban.com/top250 是豆瓣的二级域名,指向豆瓣服务器;
  • /top250 是服务器的某个资源;
  • start=0&filter= 是该URL的两个参数,分别代表开始位置和过滤条件。(最主要是这个)

先来一个只爬取TOP250电影名字的爬虫,在控制台打印输出(注意class后面别忘了有一个下划线,另外可以学习下分页url的写法):

import requests
import bs4

initrequesturl = "https://movie.douban.com/top250?start={}&filter="
urls = (initrequesturl.format(x) for x in range(0, 226, 25))
x = 0
for url in urls:
    res = requests.get(url)
    soup = bs4.BeautifulSoup(res.text, "html.parser")
    targets = soup.find_all("div", class_="hd")
    for each in targets:
        print(each.a.span.text)

输出:

肖申克的救赎
霸王别姬
这个杀手不太冷
阿甘正传
美丽人生
千与千寻
泰坦尼克号
辛德勒的名单
盗梦空间
忠犬八公的故事
机器人总动员
三傻大闹宝莱坞
放牛班的春天
海上钢琴师
楚门的世界
大话西游之大圣娶亲
星际穿越
龙猫
熔炉
教父
无间道
疯狂动物城
当幸福来敲门
怦然心动
触不可及
蝙蝠侠:黑暗骑士
乱世佳人
活着
控方证人
少年派的奇幻漂流
指环王3:王者无敌
摔跤吧!爸爸
天空之城
鬼子来了
十二怒汉
天堂电影院
飞屋环游记
大话西游之月光宝盒
哈尔的移动城堡
搏击俱乐部
罗马假日
末代皇帝
寻梦环游记
闻香识女人
辩护人
素媛
窃听风暴
死亡诗社
两杆大烟枪
飞越疯人院
指环王2:双塔奇兵
教父2
指环王1:魔戒再现
狮子王
V字仇杀队
美丽心灵
饮食男女
海豚湾
情书
何以为家
钢琴家
大闹天宫
本杰明·巴顿奇事
哈利·波特与魔法石
看不见的客人
黑客帝国
西西里的美丽传说
小鞋子
美国往事
拯救大兵瑞恩
让子弹飞
音乐之声
致命魔术
猫鼠游戏
七宗罪
被嫌弃的松子的一生
低俗小说
沉默的羔羊
蝴蝶效应
春光乍泄
勇敢的心
天使爱美丽
穿条纹睡衣的男孩
剪刀手爱德华
心灵捕手
禁闭岛
布达佩斯大饭店
阿凡达
入殓师
幽灵公主
加勒比海盗
摩登时代
致命ID
断背山
阳光灿烂的日子
重庆森林
第六感
狩猎
喜剧之王
玛丽和马克思
消失的爱人
告白
小森林 夏秋篇
大鱼
一一
阳光姐妹淘
爱在黎明破晓前
请以你的名字呼唤我
射雕英雄传之东成西就
甜蜜蜜
侧耳倾听
红辣椒
驯龙高手
倩女幽魂
超脱
杀人回忆
海蒂和爷爷
恐怖直播
菊次郎的夏天
爱在日落黄昏时
7号房的礼物
小森林 冬春篇
风之谷
哈利·波特与死亡圣器(下)
我不是药神
幸福终点站
蝙蝠侠:黑暗骑士崛起
上帝之城
萤火之森
借东西的小人阿莉埃蒂
超能陆战队
唐伯虎点秋香
神偷奶爸
无人知晓
怪兽电力公司
电锯惊魂
岁月神偷
玩具总动员3
血战钢锯岭
谍影重重3
疯狂原始人
七武士
英雄本色
喜宴
真爱至上
萤火虫之墓
东邪西毒
傲慢与偏见
时空恋旅人
贫民窟的百万富翁
黑天鹅
记忆碎片
心迷宫
纵横四海
教父3
荒蛮故事
完美的世界
达拉斯买家俱乐部
雨人
三块广告牌
花样年华
被解救的姜戈
卢旺达饭店
你的名字。
海边的曼彻斯特
我是山姆
头脑特工队
你看起来好像很好吃
恋恋笔记本
哪吒闹海
无敌破坏王
虎口脱险
冰川时代
二十二
海洋
雨中曲
爆裂鼓手
未麻的部屋
模仿游戏
一个叫欧维的男人决定去死
忠犬八公物语
燃情岁月
人工智能
魔女宅急便
房间
穿越时空的少女
天书奇谭
恐怖游轮
魂断蓝桥
黑客帝国3:矩阵革命
海街日记
猜火车
罗生门
完美陌生人
阿飞正传
头号玩家
香水
功夫
可可西里
朗读者
谍影重重2
浪潮
牯岭街少年杀人事件
谍影重重
战争之王
地球上的星星
疯狂的石头
初恋这件小事
青蛇
惊魂记
终结者2:审判日
源代码
爱在午夜降临前
步履不停
新龙门客栈
奇迹男孩
小萝莉的猴神大叔
追随
一次别离
无耻混蛋
再次出发之纽约遇见你
釜山行
血钻
东京物语
撞车
彗星来的那一夜
城市之光
2001太空漫游
梦之安魂曲
新世界
绿里奇迹
疯狂的麦克斯4:狂暴之路
聚焦
E.T. 外星人
这个男人来自地球
末路狂花
黑鹰坠落
发条橙
遗愿清单
变脸
勇闯夺命岛
国王的演讲
我爱你
黄金三镖客
千钧一发
非常嫌疑犯
秒速5厘米
驴得水
卡萨布兰卡
四个春天

哈哈搞定!

最后附上小甲鱼完整的代码:

import requests
import bs4
import re


def open_url(url):
    # 使用代理
    # proxies = {
    #     "http": "127.0.0.1:1080",
    #     "https": "127.0.0.1:1080"
    # }
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
    }
    # res = requests.get(url, headers=headers, proxies=proxies)
    res = requests.get(url, headers=headers)
    return res


def find_movies(res):
    soup = bs4.BeautifulSoup(res.text, "html.parser")
    # 电影名
    movies = []
    targets = soup.find_all("div", class_="hd")
    for each in targets:
        movies.append(each.a.span.text)
    # 评分
    ranks = []
    targets = soup.find_all("span", class_="rating_num")
    for each in targets:
        ranks.append(' 评分:%s' % each.text)
    # 资料
    messages = []
    targets = soup.find_all("div", class_="bd")
    for each in targets:
        try:
            messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())
        except:
            continue

    result = []
    length = len(movies)
    for i in range(length):
        result.append(movies[i] + ranks[i] + messages[i] + '\n')
    return result


# 找出一共有多少个页面
def find_depth(res):
    soup = bs4.BeautifulSoup(res.text, "html.parser")
    depth = soup.find('span', class_='next').previous_sibling.previous_sibling
    print(depth)
    return int(depth)


def main():
    host = "https://movie.douban.com/top250"
    res = open_url(host)
    depth = find_depth(res)

    result = []
    for i in range(depth):
        url = host + '/?start=' + str(25 * i) + '&filter='
        res = open_url(url)
        result.extend(find_movies(res))

    with open('豆瓣TOP250电影.txt', 'w', encoding="utf-8") as f:
        for each in result:
            f.write(each)


if __name__ == "__main__":
    main()

输出:


豆瓣TOP250电影.png

PS:如果爬虫有问题,可以尝试使用代理的方式,或者在爬取某一页后sleep几秒。不过目前代理IP基本上都要收费了。可以去某些网站上注册会送一些试用的代理IP,效果还不错。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容