Skip to content
Advertisement

My Python Output Repeats Itself Hundreds of Time

I am learning to scrape data from a website. I have a problem when printing my code using jupyter notebook. My output repeats itself many times and I don’t know how to fix it. Here’s my trial code:

from bs4 import BeautifulSoup
from bs4.element import Comment
import urllib
from urllib.request import urlopen
import re


url = ('https://jogjapolitan.harianjogja.com/read/2020/10/06/510/1051831/omnibus-law-cipta-kerja-disahkan-buruh-di-jogja-berkabung')
html = urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')
results = soup.find('div', class_="entry_content")
datas = (''.join(results.stripped_strings))
for data in datas:
    match = re.findall('(?:"(.*?)")', datas)
    if match:
        print(match[1])

I thought it was fine until I print it out:

Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,

And hundreds more….

All answers are so much appreciated. Thanks!

Advertisement

Answer

The for data in datas loop is causing your issue. There is no issue with your regex, as some of the answers have suggested Let’s take a look at your code’s execution.

I’ve corrected the code at the bottom of the post, but first I want to talk you through the issue.

When you create the variable data, you join multiple things into a single string. As a demonstration, you should run print(type(datas)). What this means, is that your data has already been put together.

When you loop through the string, you actually end up looping through each letter of that string. As a test, try running this:

for data in datas:
    print(data)

The program will output each letter on a new line, like so:

H
a
r
i
a
...

The Solution All you need to do is remove that for loop and everything will work fine. Here is what your final code should look like:

#Imports 


url = ('https://jogjapolitan.harianjogja.com/read/2020/10/06/510/1051831/omnibus-law-cipta-kerja-disahkan-buruh-di-jogja-berkabung')
html = urlopen(url).read()

soup = BeautifulSoup(html, 'html.parser')
results = soup.find('div', class_="entry_content")
datas = (''.join(results.stripped_strings))
#for data in datas:
match = re.findall('(?:"(.*?)")', datas)
if match:
    print(match[1])

This should give you the result:

Aksi tersebut akan berlangsung mulai hari ini hingga puncaknya pada tanggal 8 Oktober di Tugu Pal Putih Jogja. Kemudian, langkah yang dilakukan kita akan ada aksi unjuk rasa besar-besaran serentak di seluruh kota di Indonesia tanggal 8 Oktober. Kita juga akan menggalang kekuatan dengan elemen-elemen masyarakat dan akan buat aksi simultan mulai 6 sampai 8 Oktober,
Advertisement