网页文本抓取求助:指定H2标题抓取返回日期不符
问题排查与解决方案
看起来你遇到的问题是服务器返回的不是当前最新的日期内容,这大概率是因为你的请求没有模拟浏览器环境,或者元素定位的方式不够精准。我来帮你一步步解决:
可能的原因分析
- 请求头缺失:很多网站会对没有浏览器标识的请求返回缓存内容或者默认的旧数据,你的
requests.get()调用没有添加任何请求头,服务器可能识别为非浏览器请求,返回了缓存的7月24日的页面。 - 元素定位不准确:你用
soup.find('header').h2.text获取内容,但页面中可能存在多个<header>标签,第一个<header>里的<h2>恰好是旧日期,而目标的日期<h2>在另一个容器里。
修复后的代码
from bs4 import BeautifulSoup import requests # 模拟浏览器的请求头,让服务器返回正常的最新内容 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9' } url = 'https://wol.jw.org/en/wol/h/r1/lp-e' response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'lxml') # 直接通过目标h2的id定位,确保拿到正确的元素 dia = soup.find('h2', id='p89').text.strip() print(dia)
代码说明
- 添加请求头:通过
headers参数模拟浏览器发送请求,服务器会返回对应最新日期的页面内容。 - 精准定位元素:直接使用目标
<h2>的id="p89"来查找元素,避免因多个<header>标签导致的定位错误。
这样修改后,应该就能获取到正确的当日日期了。
内容的提问来源于stack exchange,提问作者Josh De Juan
相关产品推荐
相关产品推荐

