当前位置:首页 > 热点

如何使用爬虫获取网页信息

写爬虫抓网页,何使最直接的用爬页信办法就是用 Python 的 requests 库把页面 HTML 拉下来,再用 BeautifulSoup 把想要的虫获数据抠出来。别想太复杂,取网十行代码就能跑通一个最简单的何使版本。我昨天刚用这套组合抓了一个招聘网站的用爬页信岗位标题,从打开编辑器到拿到数据,虫获前后不到三分钟。取网

先装库。何使打开终端,用爬页信敲 pip install requests beautifulsoup4。虫获这两个东西体积不大,取网几秒钟就完事。何使requests 负责发 HTTP 请求,用爬页信相当于你在浏览器地址栏回车;BeautifulSoup 负责解析返回的虫获 HTML,帮你定位标签。

拿一个真实页面练手。比如我想抓某新闻网站首页所有文章的标题。代码长这样:

import requests from bs4 import BeautifulSoup url = "https://example.com/news" resp = requests.get(url) resp.encoding = 'utf-8' soup = BeautifulSoup(resp.text, 'html.parser') for h in soup.find_all('h2', class_='news-title'): print(h.get_text(strip=True)) 

注意 resp.encoding 那行。很多新手抓完发现中文全是乱码,就是因为没指定编码。requests 会自动猜,但猜错是常事。手动设成 utf-8 或者 gbk,看目标网站实际情况。

BeautifulSoup 的 find_all 是最常用的方法。第一个参数是标签名,第二个是属性过滤。class_='news-title' 里的下划线不能省,因为 class 是 Python 关键字。返回的是一个列表,每个元素都能继续用 find 往下钻。

但现实往往没那么顺利。很多网站的内容是 JavaScript 动态渲染的,requests 拿到的 HTML 里根本没有你要的数据。我上个月抓一个电商价格,返回的源码里价格位置全是空的。打开浏览器开发者工具一看,数据是后面通过接口异步加载的。

这种情况有两个选择。一是直接抓那个接口,在开发者工具的 Network 面板里找到 XHR 请求,看它返回的 JSON。这比解析 HTML 干净得多。二是用 Selenium 或 Playwright 模拟浏览器,等页面渲染完再取内容。Selenium 慢,但兼容性好;Playwright 快,但依赖浏览器内核。

还有个绕不开的问题:反爬。最简单的,网站检查请求头里的 User-Agent。你不带这个头,服务器一眼就认出你是脚本。加一行 headers = { 'User-Agent': 'Mozilla/5.0 ...'} 就能骗过去大半。再严一点的,会封 IP。这时候要么放慢速度,加 time.sleep(1) 在每次请求之间;要么上代理池,不过那又是另一个话题了。

我自己的习惯是,先手动在浏览器里打开目标页面,F12 看结构,确定数据在哪个标签里。然后写代码,跑一次,打印 soup.prettify() 看解析结果对不对。不对就调选择器。这个过程通常比写代码本身花的时间多。

最后提醒一句:抓之前看一眼网站的 robots.txt 和服务条款。有些站点明确禁止爬取,你硬来,轻则封 IP,重则收律师函。技术本身没好坏,用在哪、怎么用,自己掂量。

分享到: