Как сохранить все очищенные данные с веб-сайта в формате данных pandas? - PullRequest
1 голос
/ 23 апреля 2020

Я написал код, который удаляет контактную информацию с веб-страницы, используя BeautifulSoup и заранее спроектированную библиотеку CommonRegex , которая в основном представляет собой регулярные выражения для очистки информации об адресе США. Пока я могу чтобы извлечь информацию в виде списка и преобразовать ее в pandas фрейм данных, я не могу сохранить все значения, присутствующие в списке. Это код, который я написал:

import pandas as pd
from commonregex import CommonRegex
from urllib.request import urlopen
from bs4 import BeautifulSoup

url = 'https://www.thetaxshopinc.com/pages/contact-tax-accountant-brampton'
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')

for link in soup.find_all('p'):
    df = CommonRegex()
    df1 = df.street_addresses(link.get_text())
    df2 = df.phones(link.get_text())
    df3 = df.emails(link.get_text())
    for i in df1:
        dfr = pd.DataFrame([i], columns = ['Address'])
    for j in df2:
        dfr1 = pd.DataFrame([j], columns = ['Phone_no'])
        dfr1['Phone_no'] = dfr1['Phone_no'].str.cat(sep=', ')
        dfr1.drop_duplicate(inplace = True)
    for k in df3:
        dfr2 = pd.DataFrame([k], columns = ['Email'])

dfc = pd.concat([dfr, dfr1, dfr2], axis = 1)

Вот результат, который я получаю: -

enter image description here

Но , поскольку регулярные выражения извлекают 3 значения для Phone no, а именно:

enter image description here

Результат должен быть таким: - enter image description here

Я понятия не имею, как решить эту проблему, было бы здорово, если бы вы, ребята, могли мне помочь.

1 Ответ

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

Это должно сделать:

import pandas as pd
from commonregex import CommonRegex
from urllib.request import urlopen
from bs4 import BeautifulSoup

url = 'https://www.thetaxshopinc.com/pages/contact-tax-accountant-brampton'
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')

dict_data = {'address':[], 'phone_no': [], 'email': []
}

crex = CommonRegex()

for link in soup.find_all('p'):

    str_add = crex.street_addresses(link.get_text())
    phone = crex.phones(link.get_text())
    email = crex.emails(link.get_text())

    if str_add:
        dict_data['address'].append(str_add[0])
    if phone:
        dict_data['phone_no'].append(', '.join(phone))
    if email:
        dict_data['email'].append(email[0]) 

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