Как сделать pandas l oop быстрее: удаление текста с URL - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь удалить текст из статей на моем сайте. У меня есть «для» l oop, но он работает очень медленно. Есть ли более быстрые способы сделать это? Я читал о Pandas Built-In-L oop, векторизации и numpy векторизации, но не смог применить его к моему коду.

def scarp_text(df):

pd.options.mode.chained_assignment = None
session = requests.Session()

for j in range(0, len(df)):
    try:
        url = df['url'][j] #takes a url of an article in a column 'url'
        req = session.get(url)
        soup = BeautifulSoup(req.text, 'lxml')
    except Exception as e:
        print(e)

    tags = soup.find_all('p')
    if tags == []:
        tags = soup.find_all('p', itemprop = 'articleBody')

    # Putting together all text from HTML p tags
    article = ''
    for p in paragraph_tags:
        article = article + ' ' + p.get_text()
        article = " ".join(article.split())

    df['article_text'][j] = article #put collected text to a corresponding cell

return df

1 Ответ

1 голос
/ 19 апреля 2020

У вас есть 2 для циклов, самое внутреннее l oop обычно лучшее место для начала. Плюс оператор неэффективен для конкатенации строк. Str.join - лучший выбор, он также принимает генератор в качестве входных данных.

article = "" .join (p.get_text () для p в para_tags)

article = "" .join (article.split ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...