简体   繁体   English

我的 Python Output 重复了数百次

[英]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.使用 jupyter notebook 打印代码时出现问题。 My output repeats itself many times and I don't know how to fix it.我的 output 重复了很多次,我不知道如何解决。 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!谢谢!

The for data in datas loop is causing your issue. for data in datas循环导致您的问题。 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.创建变量data时,您将多个事物连接到一个字符串中。 As a demonstration, you should run print(type(datas)) .作为演示,您应该运行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:该程序将 output每个字母换行,如下所示:

H
a
r
i
a
...

The Solution All you need to do is remove that for loop and everything will work fine.解决方案您需要做的就是删除 for 循环,一切都会正常工作。 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,
for data in datas:
    match = re.findall('(?:"(.*?)")', **datas**)
    if match:
        print(match[1])

In your for loop you had used datas instead of data.在您的 for 循环中,您使用了数据而不是数据。 It was using datas for finding the regex pattern and not the data.它使用数据来查找正则表达式模式,而不是数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM