You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python网络爬虫如何从script标签中提取双引号内的指定文本

爬虫脚本提取script内指定文本修改方案

问题背景

抓取公开招标列表页时,原有代码直接输出a标签下的script节点会得到完整JS代码,需要提取JS代码中双引号包裹的招标名称文本(即截图红色下划线标注内容),对应参考截图如下:
爬虫问题参考截图

实现思路

目标script标签内的JS代码格式固定为readTenderNotice("招标编号","目标招标名称","其他参数")结构,用正则表达式匹配所有双引号包裹的内容,按参数位置取出对应字段即可,无需额外引入JS解析库。

修改后可运行代码

import requests
import re
from bs4 import BeautifulSoup as bs

u = 'https://web.pcc.gov.tw/prkms/tender/common/bulletion/readBulletion?querySentence=5G&tenderStatusType=%E6%8B%9B%E6%A8%99&sortCol=TENDER_NOTICE_DATE&timeRange=111&pageSize=10'
# 补充请求头绕过基础反爬
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'
}
r = requests.get(u, headers=headers)
r.encoding = 'utf-8'
soup = bs(r.text,'html.parser')

for case in soup.tbody.select('tr'):
    # 打印招标日期
    print(case.select('td')[2].string)
    # 拿到script标签内的JS字符串
    script_text = case.select('td')[3].a.script.string
    # 匹配所有双引号包裹的内容
    quote_content = re.findall(r'"([^"]*)"', script_text)
    # 第二个匹配结果就是需要的招标名称
    print(quote_content[1])
    # 拼接详情页链接
    print('https://web.pcc.gov.tw'+case.select('td')[3].a['href'])
    print("-"*50)

关键修改说明

  • 新增正则模块re导入,用于快速提取双引号内的文本
  • 不再直接打印script标签对象,通过.string属性获取标签内的纯JS代码字符串
  • 正则规则r'"([^"]*)"'会跳过双引号本身,只捕获引号内部的文本,返回结果顺序和JS参数顺序完全对应
  • 补充请求头与编码设置,解决默认请求被拦截、页面中文乱码的问题

如果后续页面JS参数顺序调整,只需要修改quote_content的索引值即可适配,不需要调整其他逻辑。

内容的提问来源于stack exchange,提问作者Hasita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:33:43