我想通過網路抓取以下網站:https ://www.assemblee-nationale.fr/12/cri/2003-2004/20040001.asp#TopOfPage 。
這是 HTML 的示例:
<html>
<body>
<div align="center">
<p align="JUSTIFY">
<strong></strong>
<strong> M. le président </strong>
Conformément...
<br>
Mes chers...
<strong> M. Maxime </strong>
Nous aussi!
<br>
<strong></strong>
</p>
<p align="JUSTIFY">
<strong></strong>
<strong> M. le président </strong>
En ouvrant...
<br>
Je vous...
<i>
(Mmes et MM...)
<br>
<strong></strong>
</i>
</p>
</div>
</body>
</html>
我想將網站轉換為一個資料框,其中每個演講者都在一列(強)中,而演講則在另一列中。
這是我的代碼:
import requests
from bs4 import BeautifulSoup
import pandas as pd
debate=[]
df=pd.DataFrame()
url = "https://www.assemblee-nationale.fr/12/cri/2003-2004/20040001.asp"
r=requests.get(url)
soup_data=BeautifulSoup(r.content, 'html.parser')
list_soup_div=soup_data.find_all('div', {'align':'center'})
for item_soup_div in list_soup_div:
for item_soup_p in item_soup_div.find_all('p', {'align':'JUSTIFY'}):
for br_tag in item_soup_p.find_all('br'):
text_speech=br_tag.previous.strip()
text_speaker=br_tag.find_previous('strong').get_text(strip=True)
debate.append({'speaker': text_speaker, 'speech': text_speech})
df=pd.DataFrame(debate)
我得到的是:
speaker speech
M. le président Conformément
M. le président Mes chers...
M. Maxime Nous aussi!
M. le président En ouvrant...
M. le président (Mmmes et MM...)
我想要的是:
speaker speech
M. le président Conformément
M. le président Mes chers...
M. Maxime Nous aussi!
M. le président En ouvrant...
M. le président Je vous... (Mmmes et MM...)
當我有一個<i>時,我在 > 之前沒有<br。這就是為什么我在示例中獲得了一個缺失的演講。
我應該如何改進我的代碼?
uj5u.com熱心網友回復:
編輯
感謝您的評論,所以讓我們嘗試相反的方法,decompose()全部為空<strong>
for tag in soup.select('strong'):
if len(tag.get_text(strip=True)) == 0:
tag.decompose()
<strong> next_siblings如果其中之一是 a ,則迭代每個并中斷<strong>:
for e in soup.select('p[align="JUSTIFY"]:not(:has(a)) >strong'):
d = {
'speaker':e.get_text(strip=True),
'speech':''
}
for s in e.next_siblings:
if s.name == 'strong':
break
else:
d['speech'] = d['speech'] ' ' s.get_text(strip=True)
data.append(d)
例子
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.assemblee-nationale.fr/12/cri/2003-2004/20040001.asp'
soup = BeautifulSoup(requests.get(url).text)
data = []
for tag in soup.select('strong'):
if len(tag.get_text(strip=True)) == 0:
tag.decompose()
for e in soup.select('p[align="JUSTIFY"]:not(:has(a)) >strong'):
d = {
'speaker':e.get_text(strip=True),
'speech':''
}
for s in e.next_siblings:
if s.name == 'strong':
break
else:
d['speech'] = d['speech'] ' ' s.get_text(strip=True)
data.append(d)
pd.DataFrame(data)
輸出
| 揚聲器 | 演講 | |
|---|---|---|
| 0 | 總統先生。 | La séance est ouverte.(La séance est ouverte à dix heures.) |
| 1個 | 總統先生。 | Conformément au premier alinéa de l'article 28 de la Constitution,je declare ouverte la session ordinaire de 2003-2004.Mes chers collègues, permettez-moi d'abord de vous dire combien je suis heureux de vous retrouver tous. |
| 2個 | M.馬克西姆格雷梅茨。 | Nous aussi ! |
| 3個 | 總統先生。 | En ouvrant cette session, je tiens à me faire l'interprète de l'émotion que nous avons tous partagée face au drame qui, cet été, a endeuillé de nombreuses familles.Je vous demanderai, par consequent, de vous lever et d'observer 評價原文為英語,由 翻譯。 une minute de silence。 |
| 4個 | 總統先生。 | Aux termes de l'article 10 du règlement, à l'ouverture de la session ordinaire, le président est assisté des six plus jeunes membres de l'Assemblée, qui remplisent les fonctions de secrétaires.Ce sont : M. Edouard Courtial, Mme Nathalie 先生Kosciusko-Morizet,MM。文森特·羅蘭、塞巴斯蒂安·于熱、馬歇爾·薩迪爾、洛朗·埃納特。 |
| 5個 | 總統先生。 | L'ordre du jour appelle la 提名六位副主席,des trois questeurs et des douze secrétaires de l'Assemblée nationale.Pour ces diverse fonctions, les presidents des groupes ont établi une liste de candidats qui a été affichée.Je n' ai re?u aucune autre candidature.En conséquence, je proclame, dans l'ordre de leur présentation:副總統:MM。Fran?ois Baroin、Jean Le Garrec、Marc-Philippe Daubresse、Rudy Salles、Mme Hélène Mignon、M. Eric Raoult;Questeurs:MM。Henri Cuq、Claude Gaillard、Didier Migaud;秘書:MM。Jacques Brunhes、Fran?ois-Michel Gonnot、Jean-Pierre Kucheida、Alain Moyne-Bressand、Germinal Peiro、Mme Marie-Fran?oise Pérol-Dumont、MM。Bernard Perrut、Jean Proriol、Didier Quentin、Fran?ois Rochebloine、Frédéric de Saint-Sernin、Jean Ueberschlag。 |
| 6個 | 總統先生。 | Je constate que le Bureau de l'Assemblée nationale est constitué.Sa composition sera notifiée à M. le Président de la République, à M. le Premier ministre, à M. le président du Sénat et publiée auJournal officiel.Le Bureau se réunira le 公報mercredi 8 octobre, à dix-sept heures trente。 |
| 7 | 總統先生。 | Je rappelle que les six commissions permanentes sont convoquées cet après-midi à seize heures trente, pour l'élection de leur bureau, et que je réunirai la conférence des presidents à dix-huit heures。 |
| 8個 | 總統先生。 | Par lettres du 2, du 12 et du 15 septembre 2003, M. le Premier ministre m'a informé que les missions precédemment confiées à MM. Jean-Fran?ois Chossy, député de la Loire, Gilbert Meyer, député du Haut-Rhin, Michel Diefenbacher, député de Lot-et-Garonne, et Mme Christine Boutin, députée des Yvelines, avaient pris fin respectivement le 9, le 14 et, pour ces deux derniers,2003 年 9 月 15 日。 |
| 9 | 總統先生。 | J'ai re?u de M. le Premier ministre une lettre m'informant de sa décision de charger, Mme Brigitte Le Brethon, députée du Calvados, d'une mission temporaire, dans le cadre des dispositions de l'article LO 144 du code électoral, auprès de M. le secrétaire d'Etat aux transports et à la mer.Cette décision a fait l'objet d'un décret publié auJournal officieldu 30 juillet 2003.J'ai re?u de M. le Premier ministre unetre m'informant de sa decision de charger M. Christian Ménard, député du Finistère, d'une mission temporaire, dans le cadre des dispositions de l'article LO 144 du code électoral, auprès de M. le ministre de l'agriculture, de l'alimentation, de la pêche et des affaires rurales.Cette decision a fait l'objet d'un décret publié auJournal officieldu 31 juillet 2003.J'ai re?u de M.le Premier ministrate unle letter m'informant de sa de cision de charger M. Francis Hillmeyer, député du Haut-Rhin, d'une mission temporaire, dans le cadre des dispositions de l'article LO 144 du code électoral, auprès de M. le 部長Ministre de l'équipement, des transports, du logement, du tourisme et de la mer.Cette décision a fait l'objet d'un décret publié auJournal officieldu 28 a?t 2003.J'ai re?u de M. le Premier ministre une lettre m 'informant de sa décision de charger M. Pierre Lang, député de la Moselle, d'une mission temporaire, dans le cadre des dispositions de l'article LO 144 du code électoral, auprès de Mme la ministre de l'écologie et du developpement durable.Cette decision a fait l'objet d'un décret publié auJournal septembre 2003.J'ai re?u de M.le Premier ministre une letter m'informant de sa décision de charger M. Pierre Morel-AL'Huissier, député de la Lozère, d'une mission temporaire, dans le cadre des dispositions de l'article LO 144 du code électoral, auprès de 信件M. le secrétaire d'Etat aux anciens combattants.Cette decision a fait l'objet d'un décret publié auJournal septembre 2003 年 9 月 24 日。 |
...
認為它接近于您的一個尚未回答的封閉問題 - 選擇更具體的元素并檢查是否<i>可用:
for e in soup.select('p[align="JUSTIFY"]:not(:has(a)) > br'):
data.append({
'speaker':e.find_previous('strong').get_text(strip=True),
'speech':' '.join((e.previous.strip(), e.next.strip(), e.find_next_sibling('i').get_text(strip=True) if e.find_next_siblings('i') else ''))
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/535859.html
