I am extracting financial data from the website and like to store it in the data frame later for sentiment analysis.
Issues:
/n
at the beginning and end. How can I
simply remove it?"a" class="plcReadMore"
has URL which i
like to extract. Issue - href
is present within tag e.g.
< a class="plcReadMore" href="/placera/telegram/2020/05/19/valueguard-bostadspriser-20-i-april-sasongsrensat-19.html">Läs hela > Python code to extract HTML data and put it into data frame for further analysis:
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()
Source XML Code:
<!-- 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>
Modified your script a bit to get title, description and href. Hopefully your questions are answered 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'])