03
Май
2020

Парсинг в базу данных на Python

Всем добрый день. Как проводите майские праздники? Возник вопрос по поводу парсинга на Python. Есть код. Он парсит номера телефонов, которые начинаются с цифры 8 на этом сайте: https://www.rttnews.com/CorpInfo/ConferenceCalls.aspx?Date=04-May-2020

Эти номера телефонов на данный момент программа просто выводит. Подскажите, как мне эти номера телефонов засунуть в базу данных PostgreSQL? Возникает ошибка:

Код:

import requests
from bs4 import BeautifulSoup
import psycopg2

conn = psycopg2.connect(database='phone',
                        user='postgres',
                        password='qwerty',
                        host='localhost')
cursor = conn.cursor()

def get_html(url):
    r = requests.get(url)
    r.encoding = 'utf8'
    return r.text


def get_link(html):
    soup = BeautifulSoup(html, 'lxml')
    divs = soup.findAll('div', {'class': ['ecoCalContent', 'ecoCalAltContent']})

    result = []
    res = []
    for div in divs:
        text = div.find('div', {'class': 'tblContent5'}).text
        result.append(text)
    ar = str(result)
    arr = ar.split(' ')
    for el in range(0, len(arr)):
        elem = arr[el]
        if (arr[el - 1].startswith('+1') == False and (
                elem.startswith('(8') and ('-' in arr[el + 1] or 'US' in arr[el + 1])) or (
                elem.startswith('8') and ('-' in arr[el + 1] or 'US' in arr[el + 1]))):
            res.append(str(elem) + str(*arr[el + 1].split(',')))
    return res


a = get_link(get_html('https://www.rttnews.com/CorpInfo/ConferenceCalls.aspx?Date=04-May-2020'))
print(a) # прога выводит: ['(800)585-8367', '(855)859-2056', '(844)583-4549', '(825)312-2257', '(800)585-8367', '877-683-2228(US)', '800-585-8367(US)', '(888)203-1112', '(877)692-2592', '(800)585-8367']
for numb in a:
    m = "INSERT INTO numbers (live_call_number) VALUES (" + numb + ");"
    cursor.execute(m)
    conn.commit()

Вывод:

['(800)585-8367', '(855)859-2056', '(844)583-4549', '(825)312-2257', '(800)585-8367', '877-683-2228(US)', '800-585-8367(US)', '(888)203-1112', '(877)692-2592', '(800)585-8367']
Traceback (most recent call last):
  File "C:/Users/PycharmProjects/main/yandex_2.py", line 41, in <module>
    cursor.execute(m)
psycopg2.errors.SyntaxError: ОШИБКА:  ошибка синтаксиса (примерное положение: "585")
LINE 1: ...SERT INTO numbers (live_call_number) VALUES ((800)585-8367);

Как засунуть эти номера телефонов в бд PostgreSQL? Заранее большое спасибо!

Источник: https://ru.stackoverflow.com/questions/1119844/%D0%9F%D0%B0%D1%80%D1%81%D0%B8%D0%BD%D0%B3-%D0%B2-%D0%B1%D0%B0%D0%B7%D1%83-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%BD%D0%B0-python

Тебе может это понравится...

Добавить комментарий