网页爬虫:如何提取HTML表格指定列中a标签的href属性?
修正爬虫代码:提取表格第二列的href属性值
我正在做一个大型网页爬虫项目,需要从目标页面表格的第二列中提取<a>标签的href属性值(示例HTML:<a href="exibir?proc=18955/989/20&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&txtExp=temporari&txtQqUma=admiss%C3%A3o+contrata%C3%A7%C3%A3o&txtNenhPalvs=&txtNumIni=&txtNumFim=&tipoBuscaTxt=Documento&_tipoBuscaTxt=on&quantTrechos=1&processo=&exercicio=&dataAutuacaoInicio=&dataAutuacaoFim=&dataPubInicio=01%2F01%2F2021&dataPubFim=31%2F12%2F2021&_relator=1&_auditor=1&_materia=1&tipoDocumento=2&_tipoDocumento=1&acao=Executa&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&txtExp=temporari&txtQqUma=admiss%C3%A3o+contrata%C3%A7%C3%A3o&txtNenhPalvs=&txtNumIni=&txtNumFim=&tipoBuscaTxt=Documento&_tipoBuscaTxt=on&quantTrechos=1&processo=&exercicio=&dataAutuacaoInicio=&dataAutuacaoFim=&dataPubInicio=01%2F01%2F2021&dataPubFim=31%2F12%2F2021&_relator=1&_auditor=1&_materia=1&tipoDocumento=2&_tipoDocumento=1&acao=Executa&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)
关键改动说明
- 移除了循环内多余的
item.find('a', first=True),直接从item(即已定位到的<a>标签)获取href属性。 - 添加了
href = item.attrs.get('href')和判断逻辑,避免遇到无href属性的<a>标签时抛出异常。 - 保持了原有链接的顺序,因为
r.html.find()返回的元素顺序与页面上的呈现顺序一致。
内容的提问来源于stack exchange,提问作者João Pedro Rodrigues Oliveira
相关产品推荐
相关产品推荐

