Очистить ссылки в pandas фрейме данных в python - PullRequest
1 голос
/ 26 марта 2020

Я довольно новичок в этом и сталкиваюсь со всеми проблемами. Любая помощь / руководство действительно ценится! У меня есть фрейм данных в следующей структуре:

data:
  LINK
<link_one>
<link_two>
<link_three>

Имя фрейма данных data , и у него есть один столбец с именем LINK , который содержит несколько веб-ссылок. Я пытаюсь взять каждую ссылку из столбца LINK и выполнить некоторые операции очистки, чтобы вернуть содержимое текста каждой ссылки и прикрепить ее к столбцу с именем CONTENT в кадре данных. Вот какой результат я надеюсь:

data:
  LINK            CONTENT
<link_one>     <text_body_one>
<link_two>     <text_body_two>
<link_three>   <text_body_three>

Это то, что я имею до сих пор:

from bs4 import BeautifulSoup
import pandas as pd
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

data = pd.read_csv("~/Downloads/links.csv")

def body_content(val):
    url = val
    try:
        page = requests.get(url, verify=False).text
    except requests.ConnectionError:
        pass 

    soup = BeautifulSoup(page, 'lxml')

    p_tags = soup.find_all('p')
    p_tags_text = [tag.get_text().strip() for tag in p_tags]

    sentence_list = [sentence for sentence in p_tags_text if not '\n' in sentence]
    sentence_list = [sentence for sentence in sentence_list if '.' in sentence]
    article = ' '.join(sentence_list)
    return article

data['CONTENT'] = zip(*data['LINK'].map(body_content))

Пока функция body_content работает, но я не могу заставить содержимое правильно присоединиться к кадру данных. Получаем следующую ошибку:

UnboundLocalError: local variable 'page' referenced before assignment

Спасибо за потраченное время!

1 Ответ

1 голос
/ 26 марта 2020

Вероятно, проблема в том, что в части try / exception код переходит к исключению и, таким образом, не создает страницу переменной, вы можете сделать следующее:

except requests.ConnectionError:
    return ''

Так что, если он имеет ошибка соединения, он вернет пустую строку.

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