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

网页爬虫:如何提取HTML表格指定列中a标签的href属性?

修正爬虫代码:提取表格第二列的href属性值

我正在做一个大型网页爬虫项目,需要从目标页面表格的第二列中提取<a>标签的href属性值(示例HTML:<a href="exibir?proc=18955/989/20&amp;offset=0">18955/989/20</a>,需提取exibir?proc=18955/989/20&offset=0),而非标签内的文本内容。但目前使用requests-html编写的代码会同时获取两者,请求修正方案以得到按原有顺序排列的href列表。

原代码

from requests_html import HTMLSession
import csv

s = HTMLSession()
def get_product_links(page):
  url = f"https://www.tce.sp.gov.br/jurisprudencia/pesquisar?txtTdPalvs=munic%C3%ADpio+pessoal+37&amp;txtExp=temporari&amp;txtQqUma=admiss%C3%A3o+contrata%C3%A7%C3%A3o&amp;txtNenhPalvs=&amp;txtNumIni=&amp;txtNumFim=&amp;tipoBuscaTxt=Documento&amp;_tipoBuscaTxt=on&amp;quantTrechos=1&amp;processo=&amp;exercicio=&amp;dataAutuacaoInicio=&amp;dataAutuacaoFim=&amp;dataPubInicio=01%2F01%2F2021&amp;dataPubFim=31%2F12%2F2021&amp;_relator=1&amp;_auditor=1&amp;_materia=1&amp;tipoDocumento=2&amp;_tipoDocumento=1&amp;acao=Executa&amp;offset={page}"
  links = []
  r = s.get(url)
  products = r.html.find('td.small a')
  for item in products:
    links.append(item.find('a', first=True).attrs['href'])
  return links
page1 = get_product_links(0)

print(page1)

问题原因

原代码中products = r.html.find('td.small a')已经直接定位到了所有符合条件的<a>标签,但循环内部又执行item.find('a', first=True)——这是在已经找到的<a>标签里再次查找子级<a>,属于多余操作,不仅会导致逻辑错误,还可能意外获取到无关内容。

修正后的代码

from requests_html import HTMLSession
import csv

s = HTMLSession()
def get_product_links(page):
  url = f"https://www.tce.sp.gov.br/jurisprudencia/pesquisar?txtTdPalvs=munic%C3%ADpio+pessoal+37&amp;txtExp=temporari&amp;txtQqUma=admiss%C3%A3o+contrata%C3%A7%C3%A3o&amp;txtNenhPalvs=&amp;txtNumIni=&amp;txtNumFim=&amp;tipoBuscaTxt=Documento&amp;_tipoBuscaTxt=on&amp;quantTrechos=1&amp;processo=&amp;exercicio=&amp;dataAutuacaoInicio=&amp;dataAutuacaoFim=&amp;dataPubInicio=01%2F01%2F2021&amp;dataPubFim=31%2F12%2F2021&amp;_relator=1&amp;_auditor=1&amp;_materia=1&amp;tipoDocumento=2&amp;_tipoDocumento=1&amp;acao=Executa&amp;offset={page}"
  links = []
  r = s.get(url)
  # 定位表格第二列的a标签,确保只获取目标列的链接
  products = r.html.find('td.small a')
  for item in products:
    # 直接从当前a标签提取href属性
    href = item.attrs.get('href')
    if href:  # 避免空href导致报错
      links.append(href)
  return links
page1 = get_product_links(0)

print(page1)

关键改动说明

  1. 移除了循环内多余的item.find('a', first=True),直接从item(即已定位到的<a>标签)获取href属性。
  2. 添加了href = item.attrs.get('href')和判断逻辑,避免遇到无href属性的<a>标签时抛出异常。
  3. 保持了原有链接的顺序,因为r.html.find()返回的元素顺序与页面上的呈现顺序一致。

内容的提问来源于stack exchange,提问作者João Pedro Rodrigues Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:45:38