当前位置:首页 > 焦点 > python爬取网页详细教程 正文

python爬取网页详细教程

来源:烟消火灭网   作者:热点   时间:2026-10-17 05:54:41

爬网页,网页说穿了就三步:拿到HTML,详细从里面挖出你要的教程东西,存下来。网页别想得太玄乎,详细Python干这活儿的教程家什就那几样——requests负责敲门要数据,BeautifulSoup或者lxml负责把门后的网页垃圾堆翻出金子。今天拿豆瓣电影Top250开刀,详细这网站结构干净,教程反爬又松,网页最适合练手。详细

先装工具。教程命令行敲两行:pip install requests beautifulsoup4,网页完事。详细别装scrapy,教程那是杀鸡用牛刀,新手光配环境就能劝退一半人。

import requests from bs4 import BeautifulSoup url = "https://movie.douban.com/top250" headers = {  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } resp = requests.get(url, headers=headers) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "html.parser") 

看到那个headers没?这玩意儿就是你的伪装。豆瓣会查来访者的身份,不带User-Agent的请求直接被当成机器人拒之门外。我一开始写爬虫也老忘这茬,结果返回来的全是403错误页面,还以为是代码写错了,后来才反应过来是没穿马甲。

拿到HTML之后别急着正则硬抠。用BeautifulSoup的select方法,像CSS选择器那样定位元素,省心得多。打开浏览器按F12,鼠标点一下电影标题,看右侧高亮的那行代码——<span class="title">肖申克的救赎</span>。复制这个选择器路径,代码里写:

titles = soup.select("span.title") for t in titles: if "/" not in t.text: # 过滤掉外文名 print(t.text) 

跑一下,25个标题整整齐齐列出来了。哎,注意那个if "/" not in t.text——豆瓣每个电影会有两个title标签,一个中文一个原文,原文前面带斜杠。这种小坑不踩一次你根本记不住。

接着翻页。Top250有10页,每页25条,URL末尾的?start=0就是页码参数,每页加25。写个for循环包起来:

for page in range(10): url = f"https://movie.douban.com/top250?start={ page*25}" # 重复上面请求+解析的代码 time.sleep(2) # 礼貌性停顿,别把人家服务器打爆 

说到time.sleep,这是爬虫的保命符。我有次贪快,循环里没加延迟,爬到第七页直接被封IP,整个宿舍楼断网半小时。后来学乖了,每请求一次歇两秒,像人浏览网页的节奏。真要大规模爬,那得上代理池和随机延迟,但那是后话。

数据到手了,存成文件才算完事。CSV最通用:

import csv with open("movies.csv", "w", newline="", encoding="utf-8-sig") as f: writer = csv.writer(f) writer.writerow(["标题", "评分"]) # 循环里把数据写入 

注意utf-8-sig编码,直接用utf-8的话Excel打开会乱码,这坑我当年踩得莫名其妙。

爬虫这事儿,说白了就是跟网站玩捉迷藏。有的站规矩,改改UA就能过;有的站精得很,要验证码、要登录、要动态渲染。真遇上那种硬茬,得上Selenium模拟浏览器,但那是进阶玩法。先把静态页爬利索了,理解请求-解析-存储这条链路,后面遇到什么妖魔鬼怪都是换汤不换药。

最后提醒一句:爬虫有边界。豆瓣这种公开数据爬来练手没问题,但涉及个人信息、付费内容的站点,别碰。法律风险不是闹着玩的,前阵子爬简历那个案子判了五年。代码能跑是本事,知道什么不该爬是智慧。

标签:

责任编辑:热点