[1]python爬虫入门,爬取豆瓣电影top250实践

明确目标

我们的目标是编写一个程序,爬取豆瓣电影Top 250页面,从中提取每部电影的名称、评分(评价分数)以及参与评分的人数(评价人数),并将这些信息整理后输出保存到一个文本文件中,以便后续查看或分析。

目标网址:https://movie.douban.com/top250?start=0

​​​​​​

完整代码

python 复制代码
import requests
import random
from bs4 import BeautifulSoup

user_agent = [
    "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
    "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
    "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
    "UCWEB7.0.2.37/28/999",
    "NOKIA5700/ UCWEB7.0.2.37/28/999",
    "Openwave/ UCWEB7.0.2.37/28/999",
    "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
    # iPhone 6:
    "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",
]


def get_user_agent():
    return {'User-Agent': random.choice(user_agent)}


with open('douban_top250.txt', 'w', encoding='utf-8') as f:
    index = 1
    for page in range(0, 250, 25):
        url = f'https://movie.douban.com/top250?start={page}'
        print(f'正在抓取第 {(page // 25) + 1} 页: {url}')
        headers = get_user_agent()
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            # content_type = response.headers.get('Content-Type', '')
            # print("Content-Type:", content_type)  # 通常 HTML 是 text/html,JSON 是 application/json
            html = response.content.decode('utf-8')
            soup = BeautifulSoup(html, 'html.parser')
            # print(soup)
            movie_items = soup.find_all('div', class_='item')
            for idx, item in enumerate(movie_items, index):
                title_tag = item.find_all('span', class_='title')
                titles = [tag.text.strip() for tag in title_tag]
                title = ' '.join(titles) if title_tag else "无标题"

                rating_tag = item.find('span', class_='rating_num', property='v:average')
                rating = rating_tag.text.strip() if rating_tag else "无评分"

                parent_div = rating_tag.find_parent('div')
                span = parent_div.find_all('span')
                last_span = span[len(span) - 1]
                num_reviews = last_span.text.strip() if last_span else "无评价人数"

                f.write(f"""{idx}.{title}\n评分:{rating} 评价人数:{num_reviews}\n""")  # 注意:加了两个换行,让每部电影间隔更清晰

            index += 25
        else:
            print(f"请求失败,状态码:{response.status_code}")
print('所有电影名称已保存到文件:douban_top250.txt')

输出内容

text 复制代码
1.肖申克的救赎 / The Shawshank Redemption
评分:9.7 评价人数:3219119人评价
2.霸王别姬
评分:9.6 评价人数:2376077人评价
3.泰坦尼克号 / Titanic
评分:9.5 评价人数:2444767人评价
4.阿甘正传 / Forrest Gump
评分:9.5 评价人数:2386915人评价
5.千与千寻 / 千と千尋の神隠し
评分:9.4 评价人数:2485955人评价
6.美丽人生 / La vita è bella
评分:9.5 评价人数:1455114人评价
7.这个杀手不太冷 / Léon
评分:9.4 评价人数:2511067人评价
8.星际穿越 / Interstellar
评分:9.4 评价人数:2124058人评价
9.盗梦空间 / Inception
评分:9.4 评价人数:2281767人评价
10.楚门的世界 / The Truman Show
评分:9.4 评价人数:1969482人评价
11.辛德勒的名单 / Schindler's List
评分:9.5 评价人数:1226734人评价
12.忠犬八公的故事 / Hachi: A Dog's Tale
评分:9.4 评价人数:1518102人评价
13.海上钢琴师 / La leggenda del pianista sull'oceano
评分:9.3 评价人数:1847450人评价
14.疯狂动物城 / Zootopia
评分:9.2 评价人数:2214307人评价
15.三傻大闹宝莱坞 / 3 Idiots
评分:9.2 评价人数:2040615人评价
16.放牛班的春天 / Les choristes
评分:9.3 评价人数:1447018人评价
17.机器人总动员 / WALL·E
评分:9.3 评价人数:1458548人评价
18.无间道 / 無間道
评分:9.3 评价人数:1531969人评价
19.控方证人 / Witness for the Prosecution
评分:9.6 评价人数:686828人评价
20.大话西游之大圣娶亲 / 西遊記大結局之仙履奇緣
评分:9.2 评价人数:1680584人评价
21.熔炉 / 도가니
评分:9.3 评价人数:1019906人评价
22.触不可及 / Intouchables
评分:9.3 评价人数:1267168人评价
23.寻梦环游记 / Coco
评分:9.1 评价人数:1929638人评价
24.教父 / The Godfather
评分:9.3 评价人数:1082370人评价
25.当幸福来敲门 / The Pursuit of Happyness
评分:9.1 评价人数:1659660人评价
26.末代皇帝 / The Last Emperor
评分:9.3 评价人数:1006454人评价
27.哈利·波特与魔法石 / Harry Potter and the Sorcerer's Stone
评分:9.2 评价人数:1387458人评价
28.龙猫 / となりのトトロ
评分:9.2 评价人数:1387682人评价
29.活着
评分:9.3 评价人数:950419人评价
30.怦然心动 / Flipped
评分:9.1 评价人数:2015141人评价
31.蝙蝠侠:黑暗骑士 / The Dark Knight
评分:9.2 评价人数:1172078人评价
32.指环王3:王者无敌 / The Lord of the Rings: The Return of the King
评分:9.3 评价人数:892710人评价
33.我不是药神
评分:9.0 评价人数:2313865人评价
34.乱世佳人 / Gone with the Wind
评分:9.3 评价人数:776206人评价
35.飞屋环游记 / Up
评分:9.1 评价人数:1469190人评价
36.让子弹飞
评分:9.0 评价人数:1887147人评价
37.哈尔的移动城堡 / ハウルの動く城
评分:9.1 评价人数:1259334人评价
38.十二怒汉 / 12 Angry Men
评分:9.4 评价人数:564327人评价
39.素媛 / 소원
评分:9.3 评价人数:762618人评价
40.海蒂和爷爷 / Heidi
评分:9.3 评价人数:753286人评价
41.猫鼠游戏 / Catch Me If You Can
评分:9.1 评价人数:1180382人评价
42.天空之城 / 天空の城ラピュタ
评分:9.2 评价人数:990527人评价
43.鬼子来了
评分:9.3 评价人数:701820人评价
44.摔跤吧!爸爸 / Dangal
评分:9.0 评价人数:1716362人评价
45.少年派的奇幻漂流 / Life of Pi
评分:9.1 评价人数:1467344人评价
46.钢琴家 / The Pianist
评分:9.3 评价人数:733670人评价
47.指环王2:双塔奇兵 / The Lord of the Rings: The Two Towers
评分:9.2 评价人数:840231人评价
48.死亡诗社 / Dead Poets Society
评分:9.2 评价人数:855618人评价
49.大话西游之月光宝盒 / 西遊記第壹佰零壹回之月光寶盒
评分:9.0 评价人数:1341144人评价
50.何以为家 / كفرناحوم
评分:9.1 评价人数:1146107人评价
51.闻香识女人 / Scent of a Woman
评分:9.1 评价人数:1002323人评价
52.绿皮书 / Green Book
评分:8.9 评价人数:1854509人评价
53.大闹天宫
评分:9.4 评价人数:498609人评价
54.黑客帝国 / The Matrix
评分:9.1 评价人数:931293人评价
55.指环王1:护戒使者 / The Lord of the Rings: The Fellowship of the Ring
评分:9.1 评价人数:941417人评价
56.罗马假日 / Roman Holiday
评分:9.1 评价人数:1031967人评价
57.教父2 / The Godfather: Part II
评分:9.3 评价人数:624240人评价
58.狮子王 / The Lion King
评分:9.1 评价人数:942210人评价
59.天堂电影院 / Nuovo Cinema Paradiso
评分:9.2 评价人数:730561人评价
60.饮食男女 / 飲食男女
评分:9.2 评价人数:707178人评价
61.辩护人 / 변호인
评分:9.2 评价人数:648727人评价
62.本杰明·巴顿奇事 / The Curious Case of Benjamin Button
评分:9.0 评价人数:1086426人评价
63.搏击俱乐部 / Fight Club
评分:9.0 评价人数:951787人评价
64.美丽心灵 / A Beautiful Mind
评分:9.1 评价人数:841669人评价
65.穿条纹睡衣的男孩 / The Boy in the Striped Pajamas
评分:9.2 评价人数:630631人评价
66.情书 / Love Letter
评分:8.9 评价人数:1295974人评价
67.两杆大烟枪 / Lock, Stock and Two Smoking Barrels
评分:9.1 评价人数:664036人评价
68.哈利·波特与死亡圣器(下) / Harry Potter and the Deathly Hallows: Part 2
评分:9.0 评价人数:951257人评价
69.窃听风暴 / Das Leben der Anderen
评分:9.2 评价人数:622350人评价
70.音乐之声 / The Sound of Music
评分:9.1 评价人数:671749人评价
71.功夫
评分:8.9 评价人数:1305767人评价
72.西西里的美丽传说 / Malèna
评分:8.9 评价人数:1077039人评价
73.哈利·波特与阿兹卡班的囚徒 / Harry Potter and the Prisoner of Azkaban
评分:9.0 评价人数:870311人评价
74.阿凡达 / Avatar
评分:8.8 评价人数:1548644人评价
75.看不见的客人 / Contratiempo
评分:8.8 评价人数:1415289人评价
76.拯救大兵瑞恩 / Saving Private Ryan
评分:9.1 评价人数:712830人评价
77.沉默的羔羊 / The Silence of the Lambs
评分:8.9 评价人数:996675人评价
78.小鞋子 / بچه های آسمان
评分:9.2 评价人数:455034人评价
79.飞越疯人院 / One Flew Over the Cuckoo's Nest
评分:9.1 评价人数:594197人评价
80.布达佩斯大饭店 / The Grand Budapest Hotel
评分:8.9 评价人数:1063636人评价
81.蝴蝶效应 / The Butterfly Effect
评分:8.9 评价人数:1048326人评价
82.禁闭岛 / Shutter Island
评分:8.9 评价人数:1092649人评价
83.心灵捕手 / Good Will Hunting
评分:9.0 评价人数:801032人评价
84.致命魔术 / The Prestige
评分:8.9 评价人数:948706人评价
85.低俗小说 / Pulp Fiction
评分:8.9 评价人数:940419人评价
86.超脱 / Detachment
评分:9.0 评价人数:706749人评价
87.哈利·波特与密室 / Harry Potter and the Chamber of Secrets
评分:8.9 评价人数:895605人评价
88.喜剧之王 / 喜劇之王
评分:8.8 评价人数:1075774人评价
89.还有明天 / C'è ancora domani
评分:9.3 评价人数:328944人评价
90.摩登时代 / Modern Times
评分:9.3 评价人数:339729人评价
91.一一
评分:9.1 评价人数:487038人评价
92.杀人回忆 / 살인의 추억
评分:8.9 评价人数:819652人评价
93.致命ID / Identity
评分:8.9 评价人数:929524人评价
94.春光乍泄 / 春光乍洩
评分:9.0 评价人数:699474人评价
95.海豚湾 / The Cove
评分:9.3 评价人数:378728人评价
96.加勒比海盗 / Pirates of the Caribbean: The Curse of the Black Pearl
评分:8.8 评价人数:951841人评价
97.美国往事 / Once Upon a Time in America
评分:9.1 评价人数:462338人评价
98.红辣椒 / パプリカ
评分:9.0 评价人数:555041人评价
99.七宗罪 / Se7en
评分:8.8 评价人数:1043180人评价
100.唐伯虎点秋香 / 唐伯虎點秋香
评分:8.8 评价人数:1203565人评价
101.狩猎 / Jagten
评分:9.1 评价人数:458437人评价
102.幽灵公主 / もののけ姫
评分:8.9 评价人数:656575人评价
103.甜蜜蜜
评分:8.9 评价人数:657652人评价
104.蝙蝠侠:黑暗骑士崛起 / The Dark Knight Rises
评分:8.9 评价人数:800897人评价
105.寄生虫 / 기생충
评分:8.8 评价人数:1522898人评价
106.天书奇谭
评分:9.2 评价人数:325031人评价
107.7号房的礼物 / 7번방의 선물
评分:8.9 评价人数:613288人评价
108.超能陆战队 / Big Hero 6
评分:8.8 评价人数:1126132人评价
109.爱在黎明破晓前 / Before Sunrise
评分:8.8 评价人数:782869人评价
110.第六感 / The Sixth Sense
评分:8.9 评价人数:625622人评价
111.爱在日落黄昏时 / Before Sunset
评分:8.9 评价人数:640249人评价
112.被嫌弃的松子的一生 / 嫌われ松子の一生
评分:8.8 评价人数:762739人评价
113.重庆森林 / 重慶森林
评分:8.8 评价人数:908554人评价
114.茶馆
评分:9.6 评价人数:199565人评价
115.未麻的部屋 / Perfect Blue
评分:9.1 评价人数:413974人评价
116.哈利·波特与火焰杯 / Harry Potter and the Goblet of Fire
评分:8.8 评价人数:783683人评价
117.入殓师 / おくりびと
评分:8.9 评价人数:735079人评价
118.借东西的小人阿莉埃蒂 / 借りぐらしのアリエッティ
评分:8.9 评价人数:617658人评价
119.菊次郎的夏天 / 菊次郎の夏
评分:8.9 评价人数:664320人评价
120.剪刀手爱德华 / Edward Scissorhands
评分:8.7 评价人数:1108878人评价
121.断背山 / Brokeback Mountain
评分:8.8 评价人数:770439人评价
122.头脑特工队 / Inside Out
评分:8.8 评价人数:783219人评价
123.勇敢的心 / Braveheart
评分:8.9 评价人数:599156人评价
124.时空恋旅人 / About Time
评分:8.8 评价人数:774780人评价
125.消失的爱人 / Gone Girl
评分:8.7 评价人数:1057217人评价
126.倩女幽魂
评分:8.8 评价人数:824723人评价
127.无人知晓 / 誰も知らない
评分:9.1 评价人数:366221人评价
128.驯龙高手 / How to Train Your Dragon
评分:8.8 评价人数:848699人评价
129.花样年华 / 花樣年華
评分:8.8 评价人数:786365人评价
130.完美的世界 / A Perfect World
评分:9.1 评价人数:354719人评价
131.傲慢与偏见 / Pride & Prejudice
评分:8.7 评价人数:910326人评价
132.新世界 / 신세계
评分:8.9 评价人数:515492人评价
133.阳光灿烂的日子
评分:8.8 评价人数:685026人评价
134.小森林 夏秋篇 / リトル・フォレスト 夏・秋
评分:9.0 评价人数:467111人评价
135.天使爱美丽 / Le Fabuleux destin d'Amélie Poulain
评分:8.7 评价人数:1011788人评价
136.一个叫欧维的男人决定去死 / En man som heter Ove
评分:8.9 评价人数:556466人评价
137.玩具总动员3 / Toy Story 3
评分:8.9 评价人数:581038人评价
138.怪兽电力公司 / Monsters, Inc.
评分:8.8 评价人数:756769人评价
139.侧耳倾听 / 耳をすませば
评分:8.9 评价人数:513431人评价
140.色,戒
评分:8.7 评价人数:941975人评价
141.教父3 / The Godfather: Part III
评分:9.0 评价人数:423351人评价
142.请以你的名字呼唤我 / Call Me by Your Name
评分:8.8 评价人数:810725人评价
143.哪吒闹海
评分:9.2 评价人数:302784人评价
144.幸福终点站 / The Terminal
评分:8.8 评价人数:631486人评价
145.被解救的姜戈 / Django Unchained
评分:8.8 评价人数:679828人评价
146.九品芝麻官
评分:8.8 评价人数:779144人评价
147.釜山行 / 부산행
评分:8.6 评价人数:1330777人评价
148.小森林 冬春篇 / リトル・フォレスト 冬・春
评分:9.0 评价人数:414769人评价
149.神偷奶爸 / Despicable Me
评分:8.7 评价人数:1033449人评价
150.萤火之森 / 蛍火の杜へ
评分:8.8 评价人数:600686人评价
151.喜宴 / 囍宴
评分:9.0 评价人数:421595人评价
152.告白
评分:8.8 评价人数:732984人评价
153.玛丽和麦克斯 / Mary and Max
评分:9.0 评价人数:463839人评价
154.头号玩家 / Ready Player One
评分:8.6 评价人数:1495519人评价
155.七武士 / 七人の侍
评分:9.3 评价人数:230093人评价
156.模仿游戏 / The Imitation Game
评分:8.8 评价人数:711673人评价
157.大鱼 / Big Fish
评分:8.8 评价人数:618952人评价
158.惊魂记 / Psycho
评分:9.0 评价人数:347931人评价
159.射雕英雄传之东成西就 / 射鵰英雄傳之東成西就
评分:8.7 评价人数:708638人评价
160.血战钢锯岭 / Hacksaw Ridge
评分:8.7 评价人数:849408人评价
161.你的名字。 / 君の名は。
评分:8.5 评价人数:1570260人评价
162.我是山姆 / I Am Sam
评分:9.0 评价人数:370762人评价
163.阳光姐妹淘 / 써니
评分:8.8 评价人数:631371人评价
164.背靠背,脸对脸
评分:9.5 评价人数:173504人评价
165.心灵奇旅 / Soul
评分:8.7 评价人数:1118334人评价
166.恐怖直播 / 더 테러 라이브
评分:8.7 评价人数:718727人评价
167.黑客帝国3:矩阵革命 / The Matrix Revolutions
评分:8.8 评价人数:490574人评价
168.电锯惊魂 / Saw
评分:8.7 评价人数:602148人评价
169.三块广告牌 / Three Billboards Outside Ebbing, Missouri
评分:8.7 评价人数:907675人评价
170.小丑 / Joker
评分:8.7 评价人数:1112889人评价
171.谍影重重3 / The Bourne Ultimatum
评分:8.9 评价人数:463584人评价
172.达拉斯买家俱乐部 / Dallas Buyers Club
评分:8.8 评价人数:499106人评价
173.疯狂原始人 / The Croods
评分:8.7 评价人数:909777人评价
174.无间道2 / 無間道II
评分:8.8 评价人数:556416人评价
175.绿里奇迹 / The Green Mile
评分:8.9 评价人数:381411人评价
176.末路狂花 / Thelma & Louise
评分:9.0 评价人数:334249人评价
177.爱在午夜降临前 / Before Midnight
评分:8.9 评价人数:463785人评价
178.海街日记 / 海街diary
评分:8.8 评价人数:512266人评价
179.疯狂的石头
评分:8.6 评价人数:912608人评价
180.风之谷 / 風の谷のナウシカ
评分:8.9 评价人数:389158人评价
181.上帝之城 / Cidade de Deus
评分:9.0 评价人数:329284人评价
182.雨中曲 / Singin' in the Rain
评分:9.1 评价人数:262414人评价
183.高山下的花环
评分:9.5 评价人数:149686人评价
184.英雄本色
评分:8.6 评价人数:598380人评价
185.2001太空漫游 / 2001: A Space Odyssey
评分:8.9 评价人数:385544人评价
186.心迷宫
评分:8.7 评价人数:604494人评价
187.记忆碎片 / Memento
评分:8.7 评价人数:660306人评价
188.纵横四海 / 縱橫四海
评分:8.8 评价人数:468187人评价
189.卢旺达饭店 / Hotel Rwanda
评分:8.9 评价人数:362712人评价
190.无敌破坏王 / Wreck-It Ralph
评分:8.7 评价人数:602912人评价
191.机器人之梦 / Robot Dreams
评分:9.1 评价人数:391197人评价
192.小偷家族 / 万引き家族
评分:8.7 评价人数:885994人评价
193.恐怖游轮 / Triangle
评分:8.5 评价人数:973717人评价
194.冰川时代 / Ice Age
评分:8.7 评价人数:677176人评价
195.牯岭街少年杀人事件 / 牯嶺街少年殺人事件
评分:8.9 评价人数:359898人评价
196.东京教父 / 東京ゴッドファーザーズ
评分:9.0 评价人数:282332人评价
197.魔女宅急便 / 魔女の宅急便
评分:8.7 评价人数:516953人评价
198.岁月神偷 / 歲月神偷
评分:8.7 评价人数:608314人评价
199.忠犬八公物语 / ハチ公物語
评分:9.2 评价人数:215539人评价
200.芙蓉镇
评分:9.3 评价人数:183860人评价
201.荒蛮故事 / Relatos salvajes
评分:8.7 评价人数:506967人评价
202.遗愿清单 / The Bucket List
评分:8.7 评价人数:527509人评价
203.大佛普拉斯
评分:8.7 评价人数:543211人评价
204.源代码 / Source Code
评分:8.6 评价人数:913997人评价
205.贫民窟的百万富翁 / Slumdog Millionaire
评分:8.6 评价人数:799880人评价
206.疯狂的麦克斯4:狂暴之路 / Mad Max: Fury Road
评分:8.7 评价人数:609357人评价
207.你看起来好像很好吃 / おまえうまそうだな
评分:8.9 评价人数:370069人评价
208.可可西里
评分:8.9 评价人数:340557人评价
209.花束般的恋爱 / 花束みたいな恋をした
评分:8.6 评价人数:801853人评价
210.东邪西毒 / 東邪西毒
评分:8.6 评价人数:628360人评价
211.城市之光 / City Lights
评分:9.3 评价人数:168923人评价
212.波西米亚狂想曲 / Bohemian Rhapsody
评分:8.6 评价人数:679653人评价
213.爆裂鼓手 / Whiplash
评分:8.6 评价人数:679609人评价
214.白日梦想家 / The Secret Life of Walter Mitty
评分:8.6 评价人数:626159人评价
215.青蛇
评分:8.6 评价人数:593366人评价
216.爱乐之城 / La La Land
评分:8.4 评价人数:1076035人评价
217.哈利·波特与死亡圣器(上) / Harry Potter and the Deathly Hallows: Part 1
评分:8.6 评价人数:682034人评价
218.黑天鹅 / Black Swan
评分:8.6 评价人数:837805人评价
219.终结者2:审判日 / Terminator 2: Judgment Day
评分:8.8 评价人数:378724人评价
220.无耻混蛋 / Inglourious Basterds
评分:8.7 评价人数:549232人评价
221.初恋这件小事 / สิ่งเล็กเล็กที่เรียกว่า...รัก
评分:8.5 评价人数:1042821人评价
222.大红灯笼高高挂
评分:8.8 评价人数:359539人评价
223.新龙门客栈 / 新龍門客棧
评分:8.7 评价人数:500661人评价
224.雨人 / Rain Man
评分:8.7 评价人数:438377人评价
225.人工智能 / A.I. Artificial Intelligence
评分:8.7 评价人数:494561人评价
226.崖上的波妞 / 崖の上のポニョ
评分:8.6 评价人数:566345人评价
227.虎口脱险 / La grande vadrouille
评分:8.9 评价人数:290467人评价
228.千钧一发 / Gattaca
评分:8.8 评价人数:341769人评价
229.真爱至上 / Love Actually
评分:8.5 评价人数:796742人评价
230.罗生门 / 羅生門
评分:8.8 评价人数:352393人评价
231.恋恋笔记本 / The Notebook
评分:8.5 评价人数:738461人评价
232.哈利·波特与凤凰社 / Harry Potter and the Order of the Phoenix
评分:8.6 评价人数:681321人评价
233.彗星来的那一夜 / Coherence
评分:8.6 评价人数:670840人评价
234.海边的曼彻斯特 / Manchester by the Sea
评分:8.6 评价人数:638634人评价
235.火星救援 / The Martian
评分:8.5 评价人数:818841人评价
236.黑客帝国2:重装上阵 / The Matrix Reloaded
评分:8.7 评价人数:448928人评价
237.奇迹男孩 / Wonder
评分:8.6 评价人数:594664人评价
238.千年女优 / 千年女優
评分:8.8 评价人数:312162人评价
239.战争之王 / Lord of War
评分:8.7 评价人数:409360人评价
240.萤火虫之墓 / 火垂るの墓
评分:8.7 评价人数:434991人评价
241.步履不停 / 歩いても 歩いても
评分:8.8 评价人数:317229人评价
242.谍影重重2 / The Bourne Supremacy
评分:8.7 评价人数:393540人评价
243.蜘蛛侠:平行宇宙 / Spider-Man: Into the Spider-Verse
评分:8.6 评价人数:746264人评价
244.攻壳机动队 / 攻殻機動隊
评分:9.0 评价人数:211457人评价
245.血钻 / Blood Diamond
评分:8.7 评价人数:416586人评价
246.冰雪奇缘 / Frozen
评分:8.5 评价人数:806714人评价
247.魂断蓝桥 / Waterloo Bridge
评分:8.8 评价人数:306354人评价
248.房间 / Room
评分:8.7 评价人数:396234人评价
249.隐藏人物 / Hidden Figures
评分:8.9 评价人数:264561人评价
250.谍影重重 / The Bourne Identity
评分:8.6 评价人数:481039人评价

随机请求头

python 复制代码
import random
user_agent = [
    "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
    "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
    "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
    "UCWEB7.0.2.37/28/999",
    "NOKIA5700/ UCWEB7.0.2.37/28/999",
    "Openwave/ UCWEB7.0.2.37/28/999",
    "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
    # iPhone 6:
    "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",
]


def get_user_agent():
    return {'User-Agent': random.choice(user_agent)}

这段代码的功能是定义一个函数 get_user_agent(),用于随机生成一个 User-Agent 字符串,通常作为 HTTP 请求头的一部分,用来模拟不同浏览器或设备的访问行为。由于需要从多个 User-Agent 中随机选取一个,因此我们必须引入 Python 的内置模块 random 来实现随机选择的功能。

请求头是什么?

在浏览器的开发者工具中,我们可以打开 Network(网络) 面板并查看某个请求的详细信息,在请求的 Headers(请求头) 部分会看到一个名为 Request Headers 的区域,这里包含了浏览器在发送请求时附带的各种信息,比如 Host、User-Agent、Accept 等。其中,User-Agent 是用来标识客户端(如浏览器类型、操作系统等)的重要字段。我们在进行网页爬取时,可以通过手动设置或随机生成 User-Agent,来伪造请求头,模拟不同设备的访问行为,从而降低被目标网站识别为爬虫的风险。

为什么我们需要请求头?

请求头可以类比为访问网页时的"身份证明"。当你向一个网站发送请求时,该网站需要判断你的访问是否来自正常的浏览器,而不是程序或爬虫。为了进行这种判断,网站会检查你发送的请求头信息。请求头中包含了诸如 User-Agent、Accept、Referer 等字段,它们共同描述了你的客户端环境,例如使用的是什么浏览器、操作系统、接受什么样的内容等。网站会根据这些信息来判断是否允许你访问相应的资源,或者是否对你进行限制。因此,合理设置请求头,尤其是 User-Agent,可以帮助你的请求更像是由正常浏览器发出的,从而提高访问成功率和避免被反爬机制拦截。

获取服务器返回的信息

python 复制代码
import requests
import random
from bs4 import BeautifulSoup

user_agent = [
    "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
    "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
    "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
    "UCWEB7.0.2.37/28/999",
    "NOKIA5700/ UCWEB7.0.2.37/28/999",
    "Openwave/ UCWEB7.0.2.37/28/999",
    "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
    # iPhone 6:
    "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",
]


def get_user_agent():
    return {'User-Agent': random.choice(user_agent)}

url = f'https://movie.douban.com/top250?start=0'
headers = get_user_agent()
response = requests.get(url, headers=headers)

content_type = response.headers.get('Content-Type', '')
print("Content-Type:", content_type)  
# 通常 HTML 是 text/html,JSON 是 application/json

这行代码response = requests.get(url, headers=headers)的作用是:使用 Python 的 requests 库向指定的网址 url 发送一个 HTTP GET 请求,并且在请求时附带了一组自定义的 请求头信息 headers(比如 User-Agent 等),用于模拟更真实的浏览器访问行为。当服务器接收到这个请求并处理完成后,会返回一个响应结果,这个响应(包括状态码、响应头、响应内容等)会被封装成一个 Response 对象,并赋值给变量 response,后续我们可以通过这个对象来获取网页的内容、状态信息等。

python 复制代码
#输出的内容
Content-Type: text/html; charset=utf-8

text/html 表示返回的内容类型是 HTML 格式的文档,而 charset=utf-8 则指明了该 HTML 文档所使用的字符编码为 UTF-8,确保浏览器能够正确解析和显示其中的文字内容。

Response的属性和方法

requests.get(...) 方法调用后会返回一个 Response 对象,这个对象中封装了服务器响应的所有相关信息,方便我们进一步处理和使用。

response.status_code

表示 HTTP 响应的状态码,用于判断请求是否成功。常见状态码有:

• 200:请求成功,服务器正常返回了数据

• 403:禁止访问,通常是因为没有权限或触发了反爬机制

• 404:页面不存在,请求的资源在服务器上找不到

response.text

返回的是服务器响应内容的 字符串形式(通常是 HTML、JSON 或纯文本等),数据类型为 str。

⚠️ 注意:它的编码方式有时可能不是你期望的(比如默认可能是 ISO-8859-1),如果出现乱码,建议手动设置编码,比如通过 response.encoding = 'utf-8',或者更稳妥的方式是使用 response.content.decode('utf-8') 来指定正确的编码解码。

response.content

返回的是服务器响应的 原始字节数据(bytes 类型),适合处理二进制内容,比如图片、音频、文件下载等。

如果你要将其转换为文本,可以使用类似 response.content.decode('utf-8') 的方式,前提是你知道内容的编码格式。

response.headers

包含了服务器返回的 响应头信息,是一个字典形式的数据结构,比如可以从中获取 Content-Type,了解返回内容的类型(如 text/html、application/json 等)。

response.json()

如果服务器返回的是 JSON 格式的数据,那么可以直接调用这个方法,它会将 JSON 数据自动解析为对应的 Python 字典(dict)或列表(list),非常方便用于后续的数据处理与提取。

解析html信息

python 复制代码
import requests
import random
from bs4 import BeautifulSoup

user_agent = [
    "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
    "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
    "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
    "UCWEB7.0.2.37/28/999",
    "NOKIA5700/ UCWEB7.0.2.37/28/999",
    "Openwave/ UCWEB7.0.2.37/28/999",
    "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
    # iPhone 6:
    "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",
]


def get_user_agent():
    return {'User-Agent': random.choice(user_agent)}

url = f'https://movie.douban.com/top250?start=0'
headers = get_user_agent()
response = requests.get(url, headers=headers)

content_type = response.headers.get('Content-Type', '')
print("Content-Type:", content_type)  # 通常 HTML 是 text/html,JSON 是 application/json

html = response.content.decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
print(soup)

由于我们已经确认目标网页返回的是 HTML 格式的数据,并且其字符编码为 UTF-8,因此我们可以使用如下代码来获取网页的 HTML 内容:
html = response.content.decode('utf-8')

这行代码的作用是:将 response 对象中存储的 原始二进制内容(bytes 类型),按照 UTF-8 编码格式 进行解码,最终转换成我们可读的 字符串(str 类型)。这样处理可以确保网页中的中文等非 ASCII 字符能够正确显示,避免出现乱码问题。

接下来,我们使用 BeautifulSoup 库来解析这份 HTML 字符串,代码如下:
soup = BeautifulSoup(html, 'html.parser')

这行代码的作用是:将已经解码好的 HTML 字符串 传入 BeautifulSoup 进行解析,使用的是 Python 内置的 html.parser 解析器。解析完成后,我们会得到一个 BeautifulSoup 对象(即 soup),通过这个对象,我们可以方便地使用各种方法和选择器(如 find()、find_all()、CSS 选择器等)来定位和提取网页中的目标数据,比如电影名称、评分、评价人数等信息。

输出结果:

BeautifulSoup 是什么?

BeautifulSoup(通常通过 from bs4 import BeautifulSoup 导入)是一个功能强大且易于使用的 Python 库,专门用于解析和操作 HTML 以及 XML 文档。它在网页爬虫和数据提取领域应用广泛,主要功能和优势包括:

  1. 从复杂的 HTML 结构中提取所需的数据或标签

    即使网页源码结构复杂、嵌套层次深,BeautifulSoup 也能帮助你轻松定位并提取出你关心的内容,比如标题、段落、链接、表格等。

  2. 支持通过多种方式快速定位元素

    你可以根据 标签名(如 <div>、<a>)、class 属性、id 属性、其他自定义属性 等多种条件来精准查找页面中的元素,从而灵活地筛选出目标内容。

  3. 提供简洁直观的 API,便于操作

    BeautifulSoup 提供了许多简单易用的方法,比如:

    • .find():查找第一个匹配的元素

    • .find_all():查找所有匹配的元素

    • .text:获取元素的文本内容

    • .get():获取元素的某个属性值(如 href、src 等)

    这些方法让数据的提取过程更加高效和直观。

  4. 非常适合用于网页爬虫、数据抓取与信息提取任务

    在需要从网页中批量获取结构化信息的场景下(比如爬取商品信息、新闻标题、电影评分等),BeautifulSoup 能够大大简化 HTML 解析的过程,是爬虫开发中不可或缺的工具之一。

抓取第一页的25篇电影信息

python 复制代码
import requests
import random
from bs4 import BeautifulSoup

user_agent = [
    "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
    "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
    "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
    "UCWEB7.0.2.37/28/999",
    "NOKIA5700/ UCWEB7.0.2.37/28/999",
    "Openwave/ UCWEB7.0.2.37/28/999",
    "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
    # iPhone 6:
    "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",
]


def get_user_agent():
    return {'User-Agent': random.choice(user_agent)}

url = f'https://movie.douban.com/top250?start=0'
headers = get_user_agent()
response = requests.get(url, headers=headers)

content_type = response.headers.get('Content-Type', '')
print("Content-Type:", content_type)  # 通常 HTML 是 text/html,JSON 是 application/json

html = response.content.decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
print(soup)


movie_items = soup.find_all('div', class_='item')

for idx, item in enumerate(movie_items, 1):
    title_tag = item.find_all('span', class_='title')
    titles = [tag.text.strip() for tag in title_tag]
    title = ' '.join(titles) if title_tag else "无标题"

    rating_tag = item.find('span', class_='rating_num', property='v:average')
    rating = rating_tag.text.strip() if rating_tag else "无评分"

    parent_div = rating_tag.find_parent('div')
    span = parent_div.find_all('span')
    last_span = span[len(span) - 1]
    num_reviews = last_span.text.strip() if last_span else "无评价人数"

    print(f'{idx}.名称:{title}\n评分:{rating} 点评人数:{num_reviews}')
text 复制代码
输出结果
1.名称:肖申克的救赎 / The Shawshank Redemption
评分:9.7 点评人数:3219088人评价
2.名称:霸王别姬
评分:9.6 点评人数:2376057人评价
3.名称:泰坦尼克号 / Titanic
评分:9.5 点评人数:2444744人评价
4.名称:阿甘正传 / Forrest Gump
评分:9.5 点评人数:2386915人评价
5.名称:千与千寻 / 千と千尋の神隠し
评分:9.4 点评人数:2485935人评价
6.名称:美丽人生 / La vita è bella
评分:9.5 点评人数:1455106人评价
7.名称:这个杀手不太冷 / Léon
评分:9.4 点评人数:2511050人评价
8.名称:星际穿越 / Interstellar
评分:9.4 点评人数:2124032人评价
9.名称:盗梦空间 / Inception
评分:9.4 点评人数:2281745人评价
10.名称:楚门的世界 / The Truman Show
评分:9.4 点评人数:1969459人评价
11.名称:辛德勒的名单 / Schindler's List
评分:9.5 点评人数:1226726人评价
12.名称:忠犬八公的故事 / Hachi: A Dog's Tale
评分:9.4 点评人数:1518091人评价
13.名称:海上钢琴师 / La leggenda del pianista sull'oceano
评分:9.3 点评人数:1847443人评价
14.名称:疯狂动物城 / Zootopia
评分:9.2 点评人数:2214269人评价
15.名称:三傻大闹宝莱坞 / 3 Idiots
评分:9.2 点评人数:2040602人评价
16.名称:放牛班的春天 / Les choristes
评分:9.3 点评人数:1447010人评价
17.名称:机器人总动员 / WALL·E
评分:9.3 点评人数:1458536人评价
18.名称:无间道 / 無間道
评分:9.3 点评人数:1531954人评价
19.名称:控方证人 / Witness for the Prosecution
评分:9.6 点评人数:686814人评价
20.名称:大话西游之大圣娶亲 / 西遊記大結局之仙履奇緣
评分:9.2 点评人数:1680574人评价
21.名称:熔炉 / 도가니
评分:9.3 点评人数:1019898人评价
22.名称:触不可及 / Intouchables
评分:9.3 点评人数:1267155人评价
23.名称:寻梦环游记 / Coco
评分:9.1 点评人数:1929625人评价
24.名称:教父 / The Godfather
评分:9.3 点评人数:1082362人评价
25.名称:当幸福来敲门 / The Pursuit of Happyness
评分:9.1 点评人数:1659652人评价

在解析好的 HTML 内容(即 BeautifulSoup 对象 soup)中,我们可以观察到,每一部电影的相关信息都被包裹在一个 <div class="item"> 标签内。也就是说,如果我们想要获取每一部电影的详细信息,只需要先找到页面中所有的 <div class="item"> 元素即可。

为此,我们使用以下代码:
movie_items = soup.find_all('div', class_='item')

这行代码的作用是:从已经解析好的 HTML(即 BeautifulSoup 对象 soup)中,查找所有符合条件(标签名为 div,且 class 属性为 "item")的元素,并将它们以列表的形式返回,存储在变量 movie_items 中。每个元素就对应着页面上的一部电影信息块,后续我们可以逐个提取其中的电影名称、评分、评价人数等数据。

接下来,我们通常会使用循环来遍历这些电影条目,逐个处理。代码如下:
for idx, item in enumerate(movie_items, 1):

这行代码使用了 Python 的内置函数 enumerate(),它的作用是对 movie_items 列表进行遍历,同时为每个元素附加一个从 1 开始递增的序号(索引)。具体来说:

• item:代表当前正在遍历的电影条目,也就是每一个 <div class="item"> 元素;

• idx:是当前元素的序号(即第几部电影),从 1 开始计数,第一次遍历时 idx=1,第二次 idx=2,依此类推。

这样做的好处是,我们不仅能够获取到每一个电影的具体内容(通过 item),还可以清楚地知道当前处理的是第几部电影(通过 idx),便于后续在输出或记录时标注序号,比如"第 1 部电影"、"第 2 部电影"等,让信息更加清晰、有条理。

python 复制代码
# 默认从 0 开始
for idx, item in enumerate(["A", "B", "C"]):
    print(idx, item)
# 输出:
# 0 A
# 1 B
# 2 C

# 从 1 开始
for idx, item in enumerate(["A", "B", "C"], 1):
    print(idx, item)
# 输出:
# 1 A
# 2 B
# 3 C
python 复制代码
    title_tag = item.find_all('span', class_='title')
    titles = [tag.text.strip() for tag in title_tag]
    title = ' '.join(titles) if title_tag else "无标题"

在解析每一个电影条目(即 item,一个 <div class="item"> 元素)时,我们通常需要提取该电影的名称(标题)。通过观察网页的 HTML 结构可以发现,电影的标题一般被包裹在 <span class="title"> 标签中。

因此,我们使用以下代码来获取这些标题标签:
title_tag = item.find_all('span', class_='title')

这行代码的作用是:在当前的 item(即一部电影对应的 <div class="item"> 元素)中,查找所有标签为 <span> 并且 class 属性为 "title" 的元素,并将这些标签对象以列表的形式返回,存储在变量 title_tag 中。这个列表中可能包含一部电影的主标题,也可能包含副标题(比如外文名),具体取决于网页的结构。

接下来,我们需要从这些 <span class="title"> 标签中提取出真正的文字内容(也就是电影的名称),并整理成一个列表。代码如下:
titles = [tag.text.strip() for tag in title_tag]

这行代码使用了 列表推导式,作用是:遍历 title_tag 列表中的每一个标签对象 tag,通过 tag.text 获取该标签内的纯文本内容,再通过 .strip() 方法去除首尾的空白字符(比如换行、空格等),最终将所有处理后的标题文本存入一个新的列表 titles 中。这个列表中可能包含一个或多个电影标题(比如中文名 + 外文名)。

最后,为了方便后续使用或输出,我们通常希望将所有标题合并成一个完整的字符串。但如果当前电影没有标题(即 title_tag 列表为空),我们也希望能给出一个默认提示。因此,使用如下代码:
title = ' '.join(titles) if title_tag else "无标题"

这行代码的含义是:

• 如果 title_tag 列表不为空(即存在标题标签),则使用 ' '.join(titles) 将列表中的所有标题用 一个空格 连接起来,形成一个完整的字符串,比如 "肖申克的救赎 The Shawshank Redemption";

• 如果 title_tag 列表为空(即没有找到任何标题标签),则返回默认字符串 "无标题",以避免程序出错或输出空值。

python 复制代码
    rating_tag = item.find('span', class_='rating_num', property='v:average')
    rating = rating_tag.text.strip() if rating_tag else "无评分"

在解析每一部电影的信息时,我们通常需要提取该电影的评分(rating)。通过观察网页的 HTML 结构可以发现,电影的评分一般被包裹在一个 <span> 标签中,并且该标签具有特定的类名和属性,通常是:

• 标签名: <span>

• class 属性: rating_num

• property 属性: v:average

为了准确地定位到这个评分元素,我们使用如下代码:
rating_tag = item.find('span', class_='rating_num', property='v:average')

这行代码的作用是:在当前的 item(即一部电影对应的 <div class="item"> 元素)中,查找一个标签为 <span>,并且同时满足两个条件------class 属性值为 "rating_num",以及 property 属性值为 "v:average" 的元素。这个元素通常就是存储电影评分数值的地方,比如 "9.3"。查找到的元素对象会被赋值给变量 rating_tag。

接下来,我们需要从这个评分标签中提取出实际的评分数字(文本信息),并处理可能出现的异常情况(比如某些电影可能没有评分信息)。代码如下:
rating = rating_tag.text.strip() if rating_tag else "无评分"

这行代码的含义是:

• 如果 rating_tag 存在(即找到了对应的评分标签),则通过 rating_tag.text 获取该标签内的纯文本内容(比如 "9.3"),再使用 .strip() 方法去除文本前后的空白字符(如空格、换行等),最终将处理后的评分值赋给变量 rating;

• 如果 rating_tag 不存在(即当前电影没有评分信息,可能由于页面结构变化或数据缺失),则返回一个默认值 "无评分",以避免程序报错或输出空值。

要获取每部电影的评价人数信息,由于该数据在网页的 HTML 结构中没有直接独立的标识(比如特定的 class 或 id),但我们可以通过已知的评分元素来间接定位到包含评价人数的区域。

我们首先通过代码 rating_tag = item.find('span', class_='rating_num', property='v:average') 找到了当前电影的评分标签(即显示评分数字,如 9.3 的 <span> 元素)。

接下来,由于评价人数位于与评分相同的父级容器内,并且是该容器中的最后一个 <span> 标签,因此我们可以通过rating_tag.find_parent('div')方法,从当前的评分标签出发,向上查找到它的直接父级 <div> 元素。

这样一来,我们就获取到了一个包含评分以及评价人数等相关信息的父级 <div> 容器,后续只需再从这个 <div> 中找到所有的 <span> 标签,并提取其中最后一个 <span> 的文本内容,通常就能得到类似 "1234567人评价" 这样的评价人数信息。

python 复制代码
    parent_div = rating_tag.find_parent('div')
    span = parent_div.find_all('span')
    last_span = span[len(span) - 1]
    num_reviews = last_span.text.strip() if last_span else "无评价人数"

通过以下代码,我们获取了评价人数所在的父级 <div> 标签以及最后一个 <span> 元素中的文本内容:
parent_div = rating_tag.find_parent('div') # 获取包含评分和评价人数的父级 div 标签
span = parent_div.find_all('span') # 查找该父级 div 中的所有 span 标签元素
last_span = span[len(span) - 1] # 获取最后一个 span 标签元素
num_reviews = last_span.text.strip() if last_span else "无评价人数" # 提取最后一个 span 的文本信息,如果没有则返回"无评价人数"

在完成单页电影信息的提取后,我们发现当前只爬取了 25 部电影 的信息,但实际上豆瓣电影 Top 250 一共包含 250 部电影。经过观察可以发现,这 250 部电影被分成了 10 页展示,每页显示 25 部电影。

当我们点击网页上的 第二页 时,可以看到浏览器地址栏中的网址变为了:
https://movie.douban.com/top250?start=25

由此我们可以推断,豆瓣电影 Top 250 的每一页是通过 URL 中的 start 参数来控制显示哪 25 部电影的。我们手动访问并记录了每一页的网址,具体如下:

• 第一页网址:https://movie.douban.com/top250?start=0

• 第二页网址:https://movie.douban.com/top250?start=25

• 第三页网址:https://movie.douban.com/top250?start=50

• 第四页网址:https://movie.douban.com/top250?start=75

• 第五页网址:https://movie.douban.com/top250?start=100

• 第六页网址:https://movie.douban.com/top250?start=125

• 第七页网址:https://movie.douban.com/top250?start=150

• 第八页网址:https://movie.douban.com/top250?start=175

• 第九页网址:https://movie.douban.com/top250?start=200

• 第十页网址:https://movie.douban.com/top250?start=225

通过对比可以明显看出,每一页的网址中,只有最后的数字在发生变化,这个数字代表了从第几部电影开始展示,每次增加 25。因此,我们只需要按照这个规律,依次改变 URL 中 start 参数的值,就可以访问到所有的 10 页内容,从而爬取到完整的 250 部电影信息。

python 复制代码
    for page in range(0, 250, 25):
        url = f'https://movie.douban.com/top250?start={page}'
        print(f'正在抓取第 {(page // 25) + 1} 页: {url}')

range 函数在这里用于生成一组数字,这些数字代表每一页 URL 中 start 参数的值。由于豆瓣电影 Top 250 每页显示 25 部电影,总共 250 部电影被分为 10 页,每一页的起始位置分别是:0、25、50、75、100、125、150、175、200、225。

我们可以使用如下方式生成这些数字:

range(0, 250, 25)

这里的 range(start, stop, step) 函数有三个参数:

• start:起始值,这里是 0,表示从第 0 部电影开始;

• stop:结束值,但不包含该值本身,这里是 250,意味着生成的数字会在达到 250 之前停止,因此实际生成的最后一个数字是 225;

• step:步长,这里是 25,表示每次增加 25。

由于 Python 中的 range 函数遵循的是左闭右开原则,即生成的序列包含起始值,但不包含结束值,所以当我们写 range(0, 250, 25) 时,实际生成的数字序列是:

0, 25, 50, 75, 100, 125, 150, 175, 200, 225

可以看到,这个序列正好覆盖了每一页的 start 参数值,从第 1 页的 0,一直到第 10 页的 225,而不会包含 250,因为 250 不在左闭右开的范围内。

python 复制代码
with open('douban_top250.txt', 'w', encoding='utf-8') as f:
    index = 1
    ...
    f.write(f"""{idx}.{title}\n评分:{rating} 评价人数:{num_reviews}\n""")
    index+=25

我们打开名为 douban_top250.txt 的文本文件,使用的是写入模式 'w'。需要注意的是,如果该文件不存在,Python 不会自动创建它;而如果文件已经存在,使用 'w' 模式打开时,会先清空文件中的原有内容,然后再进行写入操作。通过这一步,我们得到了用于写入数据的文件对象 f。

在后续操作中,我们使用 f.write(...) 方法向文件中写入内容,这些内容会被添加到文件的尾部,也就是在已有内容的后面继续写入(前提是文件未被清空)。

此外,我们定义了一个全局变量 index,用于为每部电影生成一个序号,标识其在 Top 250 中的位置。每当我们抓取完一页(即 25 部电影)后,就将 index 的值 增加 25,这样就能保证每一页电影的下标能够正确衔接,使得每部电影的序号能够连续且准确地反映其在排行榜中的位置。

结尾

最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。

同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。

谢谢您的支持,期待与您在下一篇文章中再次相遇!

相关推荐
ThisIsMirror3 小时前
CompletableFuture并行任务超时处理模板
java·windows·python
java1234_小锋4 小时前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 计算图和 tf.function 简介
python·深度学习·tensorflow·tensorflow2
程序员晚枫4 小时前
Python 3.14新特性:Zstandard压缩库正式加入标准库,性能提升30%
python
逆境清醒4 小时前
VS Code配置Python开发环境系列(1)___VScode的安装 ,VScode常用快捷键
vscode·python·visual studio code
珹洺4 小时前
Java-Spring入门指南(二十一)Thymeleaf 视图解析器
java·开发语言·spring
Predestination王瀞潞4 小时前
类的多态(Num020)
开发语言·c++
Predestination王瀞潞4 小时前
类的继承(Num019)
开发语言·c++
万粉变现经纪人5 小时前
如何解决 pip install -r requirements.txt 无效可编辑项 ‘e .‘(-e 拼写错误)问题
开发语言·python·r语言·beautifulsoup·pandas·pip·scipy
say_fall5 小时前
精通C语言(2.结构体)(内含彩虹)
c语言·开发语言·windows