如何在“th”语句中按关键字刮表

2024-09-29 23:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据嵌套在tr中的th元素的关键字来创建一个表。原因是表将根据内容顺序而变化,但关键字将保持不变。我想在'th'文本等于'productnumber'时刮表并检索'td'文本。表按“tr”元素排序。我已经接近但不正确。你知道吗

网址-https://www.amazon.com/dp/B07G5MZNJ4

我尝试了以下方法,它通过在表的第一个“tr”中提供第一个“td”的文本来工作。我想知道在哪里插入类似“find'tr'when'th'='Part Number'return text of'td”的内容。值得注意的是,“th”和“td”嵌套在“tr”下

 try:
   table = soup.find('table', attrs={'id':'product-specification-table'})
   mfg1 = table.find('tr')
   MFG_NO = mfg1.find('td').text.strip()       

 except:
    pass

当“th”包含“Part Number”时,我希望有“td”的文本。谢谢!你知道吗


Tags: text文本元素number内容顺序table原因
2条回答

使用正则表达式查找文本,然后查找\u next('td')标记。你知道吗

from bs4 import BeautifulSoup
import requests
import re
data=requests.get('https://www.amazon.com/dp/B07G5MZNJ4').text
soup=BeautifulSoup(data,'html.parser')
table = soup.find('table', attrs={'id':'product-specification-table'})
item=table.find('th',text=re.compile('Part Number'))
MFG_NO=item.find_next('td').text
print(MFG_NO.strip())

输出:

PV-923/1

我倾向于使用:contains和bs4.7.1,然后使用combinator获得下一个同级td

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.amazon.com/dp/B07G5MZNJ4/?tag=stackoverfl08-20', headers = {'User-Agent':'Mozilla/5.0'})
soup = bs(r.content, 'lxml')

if soup.select_one('title').text == 'Robot Check':
    print('bad luck')
else:
    part_number = soup.select_one('th:contains("Part Number") + td')
    if part_number is None:
        part_number = 'Not found'
    else:
        part_number = part_number.text.strip()
    print(part_number)

相关问题 更多 >

    热门问题