您现在的位置是:烟消火灭网 > 娱乐
python爬虫实例代码
烟消火灭网2026-10-17 08:00:36【娱乐】4人已围观
简介写爬虫最烦的不是代码本身,是目标网站改版。上个月帮朋友抓某招聘网站的岗位数据,刚跑通两天,对方前端一更新,class名全变了,只能重写解析逻辑。所以下面这个实例,重点不在代码多优雅,而在怎么让它稍微抗
写爬虫最烦的爬虫不是代码本身,是实例目标网站改版。上个月帮朋友抓某招聘网站的代码岗位数据,刚跑通两天,爬虫对方前端一更新,实例class名全变了,代码只能重写解析逻辑。爬虫所以下面这个实例,实例重点不在代码多优雅,代码而在怎么让它稍微抗造一点。爬虫
目标选个简单点的实例:抓取某图书网站(比如books.toscrape.com,专门给爬虫练习用的代码)首页所有书的标题、价格和评分。爬虫这个站结构稳定,实例适合演示。代码
先装两个库:requests负责发请求,BeautifulSoup负责解析HTML。命令行里pip install requests beautifulsoup4,完事。
import requests from bs4 import BeautifulSoup url = "http://books.toscrape.com/" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } resp = requests.get(url, headers=headers, timeout=10) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "html.parser") books = soup.select("article.product_pod") for book in books: title = book.h3.a["title"] price = book.select_one("p.price_color").text star = book.select_one("p.star-rating")["class"][1] print(f"{ title} | { price} | { star}") 跑一下,二十本书的信息全出来了。这里有几个坑得说清楚。
requests.get不加headers,很多网站直接返回403。User-Agent别用默认的python-requests,太扎眼。timeout必须设,不然对方服务器卡住,你的程序就干等。编码这块,有些站不声明utf-8,resp.text可能乱码,手动指定encoding比猜靠谱。
BeautifulSoup的select方法用的是CSS选择器,比find_all灵活。article.product_pod直接定位到每本书的卡片。h3.a["title"]取的是a标签的title属性,比取文本更稳——文本里可能有换行或空格。
评分那个class有点意思。HTML里写的是<p class="star-rating Three">,class属性是个列表["star-rating", "Three"],取[1]就是Three。要是网站改成data-rating="3",这行就得换写法。所以解析逻辑别写太死,留个try-except,某本书解析失败就跳过,别让整个循环崩掉。
翻页也顺手加上。这个站下一页链接在li.next里:
next_btn = soup.select_one("li.next a") if next_btn: next_url = url + next_btn["href"] 实际抓的时候,别一页页硬爬。加个time.sleep(1),给服务器喘口气。抓太快轻则封IP,重则收律师函。有些站robots.txt明确禁止爬取,动手前花十秒看一眼,省得后面麻烦。
数据存哪?小规模直接写CSV:
import csv with open("books.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["标题", "价格", "评分"]) for book in books: ... writer.writerow([title, price, star]) 要是想定时抓,别用while True加sleep,内存会涨。用crontab或者APScheduler,跑完就退出,下次触发再启动。我见过有人写爬虫跑了一周没关,最后内存泄漏把机器搞挂了。
还有一点,别把所有解析逻辑塞一个函数里。拆成fetch_page、parse_list、save_data三块,哪块出问题改哪块。网站改版通常只动HTML结构,fetch和save基本不用碰。
最后说个真事。有次抓一个电商评论,对方用了字体反爬——页面上显示的数字其实是乱码,真实数字藏在woff字体文件里。那种情况BeautifulSoup就无能为力了,得上fontTools解析字体映射。所以遇到抓不到的数据,先打开开发者工具看看是不是动态加载或者字体混淆,别急着怀疑自己代码写错了。
爬虫这东西,写起来快,维护起来烦。目标站越简单,代码越短命。保持低频率、加好异常处理、定期检查,比追求一次写完更重要。
很赞哦!(6)
上一篇: 媒介多多网
下一篇: 美国黑人被警方按压身亡画面







