综合

python网页爬虫代码

时间:2010-12-5 17:23:32  作者:休闲   来源:综合  查看:  评论:0
内容摘要:用Python写网页爬虫,最直接的组合就是requests加BeautifulSoup。别急着上Scrapy,那玩意儿对新手来说配置成本太高。我上周帮同事抓一个招聘网站的岗位信息,总共不到30行代码就

用Python写网页爬虫,网页最直接的爬虫组合就是requests加BeautifulSoup。别急着上Scrapy,代码那玩意儿对新手来说配置成本太高。网页我上周帮同事抓一个招聘网站的爬虫岗位信息,总共不到30行代码就搞定了。代码

先装库。网页命令行里敲:

pip install requests beautifulsoup4

这两行装完,爬虫基础环境就有了。代码requests负责把网页源码拉下来,网页BeautifulSoup负责从HTML里挑出你要的爬虫数据。分工明确,代码不绕弯子。网页

假设目标页面是爬虫某个图书列表页,结构大概长这样:每本书放在一个<div class="book-item">里,代码标题在<h3>标签内,价格在<span class="price">里。代码写起来就是:

import requests from bs4 import BeautifulSoup url = "https://example.com/books" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"} resp = requests.get(url, headers=headers) resp.encoding = "utf-8" soup = BeautifulSoup(resp.text, "html.parser") for item in soup.find_all("div", class_="book-item"): title = item.find("h3").get_text(strip=True) price = item.find("span", class_="price").get_text(strip=True) print(title, price)

这里有个坑得说清楚。不加headers里的User-Agent,很多网站直接返回403。我试过一个政府公开数据页面,不带UA连首页都拿不到。加上之后一切正常。这不是什么高级技巧,但新手十有八九会栽在这上面。

翻页怎么处理?观察URL规律。比如页码参数是?page=1,那就循环构造URL:

for page in range(1, 6): url = f"https://example.com/books?page={ page}" resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.text, "html.parser") # 同样的提取逻辑

但有些网站翻页用的是POST请求或者JavaScript渲染。前者需要把参数放进requests.post()的data里,后者requests就无能为力了,得换Selenium或者Playwright。判断方法很简单:右键查看网页源代码,如果翻页后的内容不在里面,那就是JS动态加载的。

数据存哪儿?小规模直接写CSV:

import csv with open("books.csv", "w", newline="", encoding="utf-8-sig") as f: writer = csv.writer(f) writer.writerow(["书名", "价格"]) # 循环里 writer.writerow([title, price])

注意utf-8-sig这个编码。用普通utf-8写入,Excel打开中文会乱码。加个BOM头就正常了。这是Windows用户的常见问题,Mac上一般没事。

速度控制别忽略。连续快速请求同一个域名,轻则被封IP,重则收到律师函。加个延时:

import time time.sleep(1.5)

1.5秒是我常用的值。太短了容易被识别,太长了效率低。如果目标网站有robots.txt,先看一眼。虽然它没有法律强制力,但遵守一下是基本礼貌。我见过有人爬电商网站被发警告邮件,就是因为请求频率太高。

最后说个实际经验。BeautifulSoup的find方法在标签不存在时会返回None,直接调get_text()会报AttributeError。稳妥的写法是先判断:

tag = item.find("h3") title = tag.get_text(strip=True) if tag else "N/A"

爬虫代码写多了会发现,真正花时间的不是写提取逻辑,而是处理各种异常情况:页面结构变了、网络超时了、编码不对了。把这些边界情况处理好,代码才算能用。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap