gpt4 book ai didi

python - BeautifulSoup 提取没有标签的条纹文本

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:57 26 4
gpt4 key购买 nike

我正在尝试解析来自网站(来自表格)的内容并仅打印来自节点的文本,我正在使用 .text.strip() 但它无法正常工作。

我的代码:

import requests
from bs4 import BeautifulSoup

r = requests.get('http://examplesite.net')
soup = BeautifulSoup(r.content, 'lxml')


builddata = soup.find('table', {'id':'BuildData'})

table_elements = builddata.find_all('tr')
for element in table_elements:
element_dict = {'element_name':element.findChildren()[0].text.strip(), 'element_value':element.findChildren()[1].text.strip()}
print(element_dict)

结果:

{'element_value': 'Студия;                                                 1-к кв;                                                 2-к кв;                                                 3-к кв;                                                 4-к кв', 
{'element_value': 'Квартира у воды, \t\t \t\tЗеленая зона', 'element_name': 'Особенности:'}

有问题的行,应该是这样的:

{'element_value': 'Студия; 1-к кв; 2-к кв; 3-к кв; 4-к кв', 
{'element_value': 'Квартира у воды, Зеленая зона', 'element_name': 'Особенности:'}

我做错了什么?

最佳答案

你应该使用 get_text()使用 strip=True:

for element in table_elements:
name, value = element.find_all("td")[:2]

element_dict = {
'element_name': name.get_text(strip=True),
'element_value': ' '.join(value.get_text(strip=True, separator=" ").split())
}
print(element_dict)

此外,看看我是如何在上面的代码中读取单元格值的——使用 find_all() 而不是 findChildren() 并将单元格解包到 name 和值对。

请注意,其中一个值应“手动”处理 - "Цена за кв. метр:"有多个空格 - 我们可以 replace them with a single one .

打印:

{'element_name': 'Район:', 'element_value': 'САО (МСК)'}
{'element_name': 'Метро:', 'element_value': 'Речной Вокзал , Петровско-Разумовская'}
{'element_name': 'До метро:', 'element_value': '5.9 км (18 мин на машине) (Посмотреть маршрут)'}
{'element_name': 'Адрес:', 'element_value': 'Дмитровское шоссе, 107 (Посмотреть на карте)'}
...
{'element_name': 'Разрешение на строительство:', 'element_value': 'Есть'}
{'element_name': 'Обновлено:', 'element_value': '19 Декабря 2016'}
{'element_name': 'Особенности:', 'element_value': 'Квартира у воды , Зеленая зона'}

作为旁注,如果您将在 HTML 解析期间更多地处理表格 HTML 结构,请查看是否将它们加载到 pandas.DataFrame 中。带有 pandas.read_html() 的对象将比尝试使用 BeautifulSoup 手动解析表格更方便。

关于python - BeautifulSoup 提取没有标签的条纹文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579056/

26 4 0