如何用Python抓取网页表格指定tr/td?以获取姓名用于自动输入为例
如何用Python抓取网页表格中指定的tr/td元素内容?
嘿,我看你已经尝试用lxml的XPath来抓取目标内容了,但原来的写法依赖固定的行索引(比如tr[3]),这其实不太靠谱——万一网页表格的行顺序调整了,你的代码就失效了。我给你两种更稳定的实现方式:
方法一:用lxml的XPath精准定位(推荐,更简洁)
我们可以通过标签文本来定位对应的内容,而不是固定行号。比如找到文本为“First Name”的<td>,然后获取它的兄弟<td>里的内容:
from lxml import html import requests # 请求网页 page = requests.get('https://www.getnewidentity.com/uk-identity-generator.php') tree = html.fromstring(page.content) # 通过标签文本定位对应的内容 firstname = tree.xpath('//td[text()="First Name"]/following-sibling::td/text()')[0] lastname = tree.xpath('//td[text()="Last Name"]/following-sibling::td/text()')[0] # 输出结果 print('FirstName: ', firstname) print('LastName: ', lastname) input("Press Enter to close...")
为什么这个方法更好?
它不依赖表格的行顺序,只要网页里保留了“First Name”和“Last Name”这两个标签,不管表格新增/删除其他行,代码都能正常抓取到内容。
方法二:用BeautifulSoup遍历行(更直观,可读性强)
如果你觉得XPath有点抽象,也可以用BeautifulSoup来遍历表格的每一行,匹配标签文本后提取内容:
首先需要先安装BeautifulSoup:
pip install beautifulsoup4
然后是代码:
from bs4 import BeautifulSoup import requests # 请求网页 page = requests.get('https://www.getnewidentity.com/uk-identity-generator.php') soup = BeautifulSoup(page.content, 'html.parser') # 找到目标表格 target_table = soup.find('table', id='reslist') # 获取表格里的所有行 rows = target_table.find_all('tr') firstname = None lastname = None # 遍历每一行,匹配标签文本 for row in rows: tds = row.find_all('td') # 确保当前行有两个td元素(标签和内容) if len(tds) == 2: label = tds[0].text.strip() value = tds[1].text.strip() if label == 'First Name': firstname = value elif label == 'Last Name': lastname = value # 输出结果 print('FirstName: ', firstname) print('LastName: ', lastname) input("Press Enter to close...")
这个方法的优势:
代码逻辑非常直观,就算是新手也能看懂每一步在做什么,而且同样不受行顺序变化的影响。
你可以根据自己的习惯选择其中一种方法,两种都能稳定抓取到你需要的FirstName和LastName,用来自动填充浏览器输入完全没问题~
内容的提问来源于stack exchange,提问作者GoekhanDev
相关产品推荐
相关产品推荐

