财经新闻分析 - 无法从标签中提取数据并将其转换为文本
Financial News Analysis - Unble to extract data from tags and convert it into text
我正在从网站中提取财务数据,并希望稍后将其存储在数据框中以用于情绪分析。
问题:
- 当我使用 for 循环处理我无法处理的所有项目时
将其转换为文本,从而生成带有标签的数据。 (为一个
单个项目,有效)
- 描述标签的开头和结尾有
/n
。我怎么能够
简单地删除它?
- 需要解压缩 URL。标签
"a" class="plcReadMore"
有 URL 我
喜欢提取。 问题 - href
存在于标签中,例如
Läs hela >
Python 提取 HTML 数据并将其放入数据框以供进一步分析的代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://www.avanza.se/placera/rutor/alla-foretagsartiklar.7.19888.a.html"
resp = requests.get(url)
soup = BeautifulSoup(resp.content, features="xml")
print(soup.prettify())
items = soup.findAll('div')
print(items)
# Checked single items and converted into text
print(items[0])
print(items[0].a.text)
print(items[0].p.text)
print(items[0].find("a", class_="plcReadMore"))
# Issue starts here when we process multiple items
list_items = []
for item in items:
list_item = {}
title_temp =
list_item['title'] = item.a
list_item['description'] = item.p
# list_item['URL']= item.find("a", {"class": "plcReadMore"})
list_item['URL'] = getattr(item.find("p", {"class": "plcReadMore"}), 'text', None)
list_items.append(list_item)
print(list_items[0])
df = pd.DataFrame(list_items, columns=['title', 'description', 'URL'])
df.head()
来源XML代码:
<!-- Unable to get href from tag a under class "plcReadMore"-->
<?xml version="1.0" encoding="utf-8"?>
<ul class="cleanList plcTeaserList XSText">
<li class="active">
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
BOSTADSPRISER -2,0% I APRIL, SÄSONGSRENSAT -1,9%
</a>
<p class="shortIntro">
STOCKHOLM (Nyhetsbyrån Direkt) Bostadspriserna i Sverige sjönk 2,0 procent i april jämfört med föregående månad. Säsongsrensat sjönk priserna 1,9 procent.Det visar Valueguards HOX-index.Bostadspriserna har sjunkit 1,2 procent under den senaste tremån
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/19/valueguard-bostadspriser-20-i-april-sasongsrensat-19.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Direkt
</div>
</div>
<div class="cell dateCol XXSText">
Idag 06:00
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Bonavas styrelseordförande köper 5 000 aktier
</a>
<p class="shortIntro">
Bostadsutvecklaren Bonavas styrelseordförande Mikael Norman har den 15 maj köpt 5 000B-aktier i bolaget. Aktierna köptes till kursen 38,92 kronor per aktie, en affär på 195 000 kronor. Affären gjordes på Nasdaq Stockholm. Det framgår av Finansinspekt
</p>
</div>
<!-- Here comes the issue -->
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-bonavas-styrelseordforande-koper-5-000-aktier.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Finwire
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Nordea mäklar post på 1,0 procent av aktierna i Bonava
</a>
<p class="shortIntro">
Nordea mäklade på fredagen en post på 1,06 miljoner B-aktier i bostadsutvecklaren Bonava inbördes till kursen 38,16 kronor per aktie. Affären är på 40,4 miljoner kronor och motsvarar 1,0 procent av aktierna i bolaget.
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-nordea-maklar-post-pa-10-procent-av-aktierna-i-bonava.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Finwire
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Bonavas vd har ökat med 10 000 aktier
</a>
<p class="shortIntro">
Bostadsutvecklaren Bonavas vd Joachim Hallengren har ökat innehavet med 10 000 aktier. Den totala köpesumman uppgår till 366 594 kronor med ett genomsnittspris på 36,66 kronor per aktie. Det framgår av Finansinspektionens insynsregister.
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-bonavas-vd-har-okat-med-10-000-aktier.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Finwire
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
VD JOACHIM HALLENGREN KÖPT AKTIER FÖR 0,4 MLN KR (OMS)
</a>
<p class="shortIntro">
(Omsändning: skickades första gången på torsdagskvällen)STOCKHOLM (Nyhetsbyrån Direkt) Joachim Hallengren, som är vd för bostadsutvecklaren Bonava, har på torsdagen köpt 10.000 aktier i bolaget för en köpeskilling om närmare 0,4 miljoner kronor.Det f
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-vd-joachim-hallengren-kopt-aktier-for-04-mln-kr-oms.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Direkt
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
VD JOACHIM HALLENGREN KÖPT AKTIER FÖR 0,4 MLN KR
</a>
<p class="shortIntro">
STOCKHOLM (Nyhetsbyrån Direkt) Joachim Hallengren, som är vd för bostadsutvecklaren Bonava, har på torsdagen köpt 10.000 aktier i bolaget för en köpeskilling om närmare 0,4 miljoner kronor.Det framgår av Finansinspektionens insynsrapportering. Köpet
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/14/bonava-vd-joachim-hallengren-kopt-aktier-for-04-mln-kr.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Direkt
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-14
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Aktierna som fått sänkta riktkurser
</a>
<p class="shortIntro">
<span class="bold plcVignette upperCase">
Börs:
</span>
141 aktier på börsen har fått se sina genomsnittliga riktkurser sänkas under de senaste sex månaderna. I fyra av aktierna har riktkurserna sänkts med över 50 procent.
</p>
</div>
<a class="plcReadMore" href="/placera/redaktionellt/2020/05/13/aktierna-som-fatt-sankta-riktkurser.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Karl Lans
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-13
</div>
</div>
</li>
</ul>
稍微修改了您的脚本以获得标题、描述和 href。希望您的问题得到解答 in-line。
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://www.avanza.se/placera/rutor/alla-foretagsartiklar.7.19888.a.html"
r = requests.get(url)
soup = BeautifulSoup(r.content, "lxml")
base_url='https://www.avanza.se'
items = soup.find_all('div',{'class':'item'})
list_items = []
for item in items:
list_item = {}
# === this gets title, description and href ===
title=item.a.text
description=item.find('p',{'class':'shortIntro'}).text.strip() # strip() removes whitespace around description
href=item.find('a',{'class':'plcReadMore'}).get('href')
#===============================================
list_item['title'] = title
list_item['description'] = description
list_item['URL'] = base_url + href
list_items.append(list_item)
df = pd.DataFrame(list_items, columns=['title', 'description', 'URL'])
我正在从网站中提取财务数据,并希望稍后将其存储在数据框中以用于情绪分析。
问题:
- 当我使用 for 循环处理我无法处理的所有项目时
将其转换为文本,从而生成带有标签的数据。 (为一个 单个项目,有效) - 描述标签的开头和结尾有
/n
。我怎么能够 简单地删除它? - 需要解压缩 URL。标签
"a" class="plcReadMore"
有 URL 我 喜欢提取。 问题 -href
存在于标签中,例如 Läs hela >
Python 提取 HTML 数据并将其放入数据框以供进一步分析的代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://www.avanza.se/placera/rutor/alla-foretagsartiklar.7.19888.a.html"
resp = requests.get(url)
soup = BeautifulSoup(resp.content, features="xml")
print(soup.prettify())
items = soup.findAll('div')
print(items)
# Checked single items and converted into text
print(items[0])
print(items[0].a.text)
print(items[0].p.text)
print(items[0].find("a", class_="plcReadMore"))
# Issue starts here when we process multiple items
list_items = []
for item in items:
list_item = {}
title_temp =
list_item['title'] = item.a
list_item['description'] = item.p
# list_item['URL']= item.find("a", {"class": "plcReadMore"})
list_item['URL'] = getattr(item.find("p", {"class": "plcReadMore"}), 'text', None)
list_items.append(list_item)
print(list_items[0])
df = pd.DataFrame(list_items, columns=['title', 'description', 'URL'])
df.head()
来源XML代码:
<!-- Unable to get href from tag a under class "plcReadMore"-->
<?xml version="1.0" encoding="utf-8"?>
<ul class="cleanList plcTeaserList XSText">
<li class="active">
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
BOSTADSPRISER -2,0% I APRIL, SÄSONGSRENSAT -1,9%
</a>
<p class="shortIntro">
STOCKHOLM (Nyhetsbyrån Direkt) Bostadspriserna i Sverige sjönk 2,0 procent i april jämfört med föregående månad. Säsongsrensat sjönk priserna 1,9 procent.Det visar Valueguards HOX-index.Bostadspriserna har sjunkit 1,2 procent under den senaste tremån
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/19/valueguard-bostadspriser-20-i-april-sasongsrensat-19.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Direkt
</div>
</div>
<div class="cell dateCol XXSText">
Idag 06:00
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Bonavas styrelseordförande köper 5 000 aktier
</a>
<p class="shortIntro">
Bostadsutvecklaren Bonavas styrelseordförande Mikael Norman har den 15 maj köpt 5 000B-aktier i bolaget. Aktierna köptes till kursen 38,92 kronor per aktie, en affär på 195 000 kronor. Affären gjordes på Nasdaq Stockholm. Det framgår av Finansinspekt
</p>
</div>
<!-- Here comes the issue -->
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-bonavas-styrelseordforande-koper-5-000-aktier.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Finwire
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Nordea mäklar post på 1,0 procent av aktierna i Bonava
</a>
<p class="shortIntro">
Nordea mäklade på fredagen en post på 1,06 miljoner B-aktier i bostadsutvecklaren Bonava inbördes till kursen 38,16 kronor per aktie. Affären är på 40,4 miljoner kronor och motsvarar 1,0 procent av aktierna i bolaget.
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-nordea-maklar-post-pa-10-procent-av-aktierna-i-bonava.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Finwire
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Bonavas vd har ökat med 10 000 aktier
</a>
<p class="shortIntro">
Bostadsutvecklaren Bonavas vd Joachim Hallengren har ökat innehavet med 10 000 aktier. Den totala köpesumman uppgår till 366 594 kronor med ett genomsnittspris på 36,66 kronor per aktie. Det framgår av Finansinspektionens insynsregister.
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-bonavas-vd-har-okat-med-10-000-aktier.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Finwire
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
VD JOACHIM HALLENGREN KÖPT AKTIER FÖR 0,4 MLN KR (OMS)
</a>
<p class="shortIntro">
(Omsändning: skickades första gången på torsdagskvällen)STOCKHOLM (Nyhetsbyrån Direkt) Joachim Hallengren, som är vd för bostadsutvecklaren Bonava, har på torsdagen köpt 10.000 aktier i bolaget för en köpeskilling om närmare 0,4 miljoner kronor.Det f
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/15/bonava-vd-joachim-hallengren-kopt-aktier-for-04-mln-kr-oms.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Direkt
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-15
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
VD JOACHIM HALLENGREN KÖPT AKTIER FÖR 0,4 MLN KR
</a>
<p class="shortIntro">
STOCKHOLM (Nyhetsbyrån Direkt) Joachim Hallengren, som är vd för bostadsutvecklaren Bonava, har på torsdagen köpt 10.000 aktier i bolaget för en köpeskilling om närmare 0,4 miljoner kronor.Det framgår av Finansinspektionens insynsrapportering. Köpet
</p>
</div>
<a class="plcReadMore" href="/placera/telegram/2020/05/14/bonava-vd-joachim-hallengren-kopt-aktier-for-04-mln-kr.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Direkt
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-14
</div>
</div>
</li>
<li>
<div class="item">
<div class="cell">
<div class="expand">
<a class="title" href="#">
Aktierna som fått sänkta riktkurser
</a>
<p class="shortIntro">
<span class="bold plcVignette upperCase">
Börs:
</span>
141 aktier på börsen har fått se sina genomsnittliga riktkurser sänkas under de senaste sex månaderna. I fyra av aktierna har riktkurserna sänkts med över 50 procent.
</p>
</div>
<a class="plcReadMore" href="/placera/redaktionellt/2020/05/13/aktierna-som-fatt-sankta-riktkurser.html">
Läs hela
</a>
</div>
<div class="cell writerCol XXSText">
<div class="writer">
Karl Lans
</div>
</div>
<div class="cell dateCol XXSText">
2020-05-13
</div>
</div>
</li>
</ul>
稍微修改了您的脚本以获得标题、描述和 href。希望您的问题得到解答 in-line。
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://www.avanza.se/placera/rutor/alla-foretagsartiklar.7.19888.a.html"
r = requests.get(url)
soup = BeautifulSoup(r.content, "lxml")
base_url='https://www.avanza.se'
items = soup.find_all('div',{'class':'item'})
list_items = []
for item in items:
list_item = {}
# === this gets title, description and href ===
title=item.a.text
description=item.find('p',{'class':'shortIntro'}).text.strip() # strip() removes whitespace around description
href=item.find('a',{'class':'plcReadMore'}).get('href')
#===============================================
list_item['title'] = title
list_item['description'] = description
list_item['URL'] = base_url + href
list_items.append(list_item)
df = pd.DataFrame(list_items, columns=['title', 'description', 'URL'])