爬虫如何抓取网页数据

焦点 2026-10-17 04:02:12 91319
```html

写爬虫最核心的爬虫动作就一个:把网页的HTML源码拿到手。你打开浏览器看到的何抓花哨页面,本质上是取网服务器发回来的一堆字符,浏览器负责把它渲染成视觉样式。页数爬虫干的爬虫事,就是何抓跳过渲染这一步,直接去读那堆字符。取网

拿Python来说,页数requests库三行代码就能完成这个动作:

import requests resp = requests.get("https://example.com") print(resp.text) 

跑完这段,爬虫终端里会刷出一大段HTML。何抓这就是取网原始数据。但别高兴太早——你拿到的页数很可能不是你在浏览器里看到的那份内容。

动态渲染是爬虫个绕不过去的坎

很多网站的内容不是跟着HTML一起发过来的。页面加载完之后,何抓JavaScript再去请求数据,取网然后把结果塞进DOM里。你用requests抓到的源码里,目标数据的位置可能是空的,或者只有一个加载动画的div。

我前阵子想抓某个招聘网站上的岗位列表,requests.get返回的HTML里干干净净,一个职位都没有。打开Chrome的开发者工具,切到Network面板刷新页面,才看到真正的数据是通过一个XHR请求拿到的JSON。这种情况下有两条路:一是直接找到那个API接口,用requests请求JSON,省事得多;二是上Selenium或Playwright,驱动一个真实浏览器把页面跑完再取DOM。

能找接口就找接口。驱动浏览器慢、吃内存,还容易被检测。但有些站点把接口参数做了加密签名,逆向成本太高,那就只能老老实实模拟浏览器行为。

拿到HTML之后,提取才是细活

假设你已经拿到了一份包含目标数据的HTML。接下来要从一堆嵌套标签里把需要的内容抠出来。常用的工具是BeautifulSoup和lxml,后者基于XPath,速度更快。

举个例子,假设页面结构是这样的:

<div class="article"> <h2>标题文本</h2> <p class="meta">2024-01-15</p> </div> 

用BeautifulSoup提取标题:

from bs4 import BeautifulSoup soup = BeautifulSoup(resp.text, "lxml") title = soup.select_one("div.article h2").text 

这里有个实际问题:网站的class名会变。今天叫article-title,下个月改版可能就叫post-heading。写死的选择器迟早会挂。我的习惯是尽量找结构上稳定的锚点,比如itemprop属性或者data-开头的自定义属性,这些东西改版时动的概率小一些。

请求本身也有很多讲究

直接裸奔发请求,服务器一眼就认出你不是浏览器。默认的User-Agent是python-requests/2.x,很多网站直接返回403。加一个常见的浏览器UA是最基本的操作:

headers = {  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/120.0.0.0 Safari/537.36" } resp = requests.get(url, headers=headers) 

频率也得控制。一秒发几十个请求过去,轻则被封IP,重则触发对方的WAF。加个time.sleep(1)是最粗糙的做法,更稳妥的是用scrapy自带的AutoThrottle中间件,它会根据服务器响应时间自动调节请求间隔。

还有Cookie和登录态的问题。有些数据只有登录后才能看到,那就得先模拟登录拿到Session,后续请求带上这个Session。requests.Session()可以保持Cookie,用起来比较顺手。

解析只是中间步骤,存储才是终点

提取出来的数据总得有个去处。少量数据写CSV就行,pandas.to_csv()一行搞定。数据量大或者需要去重、查询,那就上数据库。MySQL、PostgreSQL、MongoDB都行,看数据结构决定。我一般抓完先存一份原始HTML到本地磁盘,解析逻辑改了可以重新跑,不用再请求一遍。

整个流程串起来就是:发请求拿HTML → 解析提取字段 → 清洗存储。每一步都有坑,但核心逻辑就这么朴素。真正花时间的地方在于应对各种反爬策略和页面结构变化,那是另一个话题了。

```
本文地址:http://www.79wt.cn/news/135a9599769.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

友情链接