Парсинг в базу данных на 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? Заранее большое спасибо!
Ответы (1 шт):
Он не понимает что скобки внутри номера это часть номера, попробуйте добавить одинарные кавычки ' '
for numb in a:
m = "INSERT INTO numbers (live_call_number) VALUES ('" + str(numb) + '");"
cursor.execute(m)
conn.commit()
Можно использовать регулярные выражения чтобы оставить в тексте только цифры, и потом положить в БД
select regexp_replace('877-683-2228 (US)', '[^0-9]+', '', 'g');
regexp_replace
----------------
8776832228
(1 row)