Сохранение скопированного содержимого в базе данных Sqllite3 - Как? - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь почистить сайт, скажем, Stackoverflow. Я написал код, который очищает текст, а также изображения и URL-адреса. Я хочу сохранить эти данные в базе данных sqllite.

Я уже установил соединение с базой данных .. Однако при сохранении содержимого в базе данных появляется ошибка.

вот мойкод scraper.py

from bs4 import BeautifulSoup, SoupStrainer
import requests
from urllib.request import urlopen
import re
import sqlite3
url = "http://stackoverflow.com/"

page = requests.get(url)
data = page.text
soup = BeautifulSoup(data, features='html.parser')
soup.prettify()
text_data = soup.find_all('p')
print(text_data) #This will return all Text data.
for link in soup.find_all('a'):
    print(link.get('href')) #This will return all urls

html = urlopen(url)
bs = BeautifulSoup(html, features='html.parser')
images = bs.find_all('img', {'src':re.compile('.jpg')})
for image in images:
    print(image['src']+'\n') #This will return all Image urls

conn  = sqlite3.connect('scraped.sqlite3',check_same_thread=False)
curs = conn.cursor()
#curs.execute("INSERT INTO scraped(data,link,img_url) values('text_data','link.get('href')','image['src']")
conn.commit()

после ввода этой строки в программу

curs.execute("INSERT INTO scraped(data,link,img_url) values('text_data','link.get('href')','image['src']")
``` it throws an error like sqlite3.OperationalError: near "href": syntax error
I tried finding it but didnt understand it. Sorry if it is something very trivial

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Вы должны использовать параметры в своем запросе и привязывать значения, которые вы хотите вставить к ним, чтобы избежать всевозможных мерзостей, вызванных несбалансированными кавычками в значениях, которые будут вставлены, и т. Д. Поиск sql инъекция для более:

cur.execute("INSERT INTO scraped(data,link,img_url) VALUES (?,?,?)", (text_data, link.get('href'), image['src']))
1 голос
/ 16 октября 2019
curs.execute(
    "INSERT INTO scraped (data, link, img_url) "
    "VALUES ('{text_data}', '{href}', '{image}'".format(
        text_data=text_data,
        href=link.get('href'),
        image=','.join([image['src'] for image in images])
    )
)

ref: https://docs.python.org/3/library/string.html#formatstrings


ПРИМЕЧАНИЕ. Благодаря @Shawn, см. ответ ниже , всегда помните о SQL-инъекциях

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