我想根据嵌套在“ tr”中的“ th”元素的关键字来抓取一个表格。原因是表格会因内容顺序而异,但关键字将保持不变。我想在“ th”文本等于“ Product Number”时抓取表格并检索“ td”文本。该表按“ tr”元素排序。我已经接近但不正确。
URL-https://www.amazon.com/dp/B07G5MZNJ4
我尝试了以下操作,它通过在表的第一个“ tr”中提供第一个“ td”的文本来工作。我想知道当'th'='Part Number'返回'td'文本时在哪里插入“ find'tr”这样的注释,'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'。谢谢!
答案 0 :(得分:1)
使用正则表达式查找文本,然后使用find_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
答案 1 :(得分:1)
我的偏好是使用:包含bs4 4.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)