如何抓取网页内容
```html 打开浏览器开发者工具,何抓切到Network面板,取网刷新页面——你会看到几十上百个请求飞过去。页内网页内容不是何抓一整块石头,它是取网一堆HTTP响应拼出来的。抓取的页内本质,就是何抓模仿浏览器发请求,然后从返回的取网HTML、JSON或者XML里把你要的页内数据抠出来。 最直接的何抓办法是用Python的 但别高兴太早。很多网站会检查请求头里的页内User-Agent,发现你是何抓脚本就直接返回403。我第一次抓某电商商品价格时就踩了这个坑,取网本地跑得好好的页内,放到服务器上全是空数据。后来加了一行 正则表达式能干活,但写起来像天书,页面结构一改就废。更稳的是用解析库。Python里 如果目标网站是JavaScript动态渲染的——比如用React或Vue做的单页应用—— 你得考虑频率。每秒几十个请求砸过去,轻则IP被封,重则收到律师函。加个 还有一点:别把数据存在内存里。抓取过程中程序崩了是常事,边抓边写CSV或SQLite。我习惯用 robots.txt不是法律,但它是网站明示的意愿。抓公开数据一般没事,但别碰个人隐私、别绕过登录、别把抓来的内容直接商用。有些网站会在服务条款里明确禁止爬虫,你硬抓就是违约。我自己的底线是:只抓不登录就能看到的页面,且频率控制在人工浏览的水平。 最后说个冷门技巧:如果目标页面结构复杂但数据在 抓取网页内容不难,难的是稳定、持续、不惹麻烦地拿到你要的东西。工具选对,节奏放慢,剩下的就是耐心。如何抓取网页内容
requests库。三行代码就能拿到一个页面的取网HTML源码:import requests resp = requests.get("https://example.com") print(resp.text)headers={ "User-Agent": "Mozilla/5.0 ..."}才解决。所以,永远记得伪装成浏览器。HTML拿到手,怎么把数据挖出来?
BeautifulSoup和lxml是主流。比如抓取所有标题:from bs4 import BeautifulSoup soup = BeautifulSoup(resp.text, "lxml") for h2 in soup.find_all("h2"): print(h2.get_text(strip=True))requests拿到的HTML里根本没有数据。这时候要么分析XHR请求直接抓API,要么上Selenium或Playwright模拟浏览器。我一般先看Network里有没有干净的JSON接口,有就直接请求,省时省力。没有的话,Playwright比Selenium快,而且对异步加载支持更好。抓取不是一次性的活儿
time.sleep(1)是最低成本的礼貌。更稳妥的是用代理池,或者直接买现成的爬虫API服务。去年我帮朋友抓某论坛帖子,前两百页顺利,之后全部返回429。后来把间隔调到3秒,又换了一组代理,才跑完。csv.writer追加模式,每抓十条就flush()一次。这样即使中途断掉,前面的数据还在。合法性问题绕不开
<script>标签里的JSON中,直接正则提取那段JSON比解析整个DOM快十倍。比如很多新闻网站会把文章内容塞在window.__INITIAL_STATE__里。找到它,json.loads一下,世界就清净了。