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
相关产品推荐
相关产品推荐

