ボーナスsqliteにデータを入れる
1. sqlite
廃棄されたデータが含まれているといえば、Coueraで学んだsqliteを思い出した.そこで抽出したデータをSQLで保存してみました.import requests
import sqlite3
import json
import codecs
from bs4 import BeautifulSoup
# sqlite 를 사용하기 위해 필요할지도 모르는 모듈을 import 해온다.
def extract_job(html):
title = html.find("h2", {"class": "mb4"}).find("a")["title"]
company = html.find("h3", {"class":"fc-black-700"}).find("span").string.strip()
location = html.find("span", {"class": "fc-black-500"}).string.strip()
job_id = html["data-jobid"]
link = f"https://stackoverflow.com/jobs?id={job_id}&q=python"
return title,company,location,link
# 기존의 return은 중괄호 안에 보기좋게 저장되어있었다. dict의 tuple 형태로 말이다.
#근데 그렇게 저장하면 각각의 원소를 뽑아내기 힘들어진다. 그래서 위에 처럼 간소화 하자!
def extract_so_jobs(last_page):
conn = sqlite3.connect("C:\\Bitnami\\wampstack-7.4.6-1\\apache2\\htdocs\\scrapper.sqlite") # Mention the full path to where SQLite is located.
cur = conn.cursor()
cur.executescript('''
DROP TABLE IF EXISTS scrapper;
CREATE TABLE scrapper (title TEXT, company TEXT, location TEXT, link TEXT)
''')
# 두줄을 적으려면 executescript 함수를 사용할 것.
# SQL 문법과 python 안에서의 사용법은 구글링하면 자세하게 알 수 있으므로 생략하겠다.
jobs = []
for page in range(1):
print(f"Scrapping SO Page:{page}")
result = requests.get(f"{URL}&pg={page + 1}")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class":"-job"} )
for result in results:
job = extract_job(result)
jobs.append(job)
# 또 다시 for loop을 만들어준다 jobs 리스트를 순회하기 위해서.
for data in jobs:
title = data[0]
company = data[1]
location = data[2]
link = data[3]
cur.execute('''INSERT INTO scrapper (title, company, location, link)
VALUES ( ?, ?, ?, ? )''', ( title, company, location, link ) )
conn.commit()
cur.close()
return jobs
# 생각보다 간단했지만 이걸 알아내기까지 많은 시행착오를 겪었다.
もういい...もういい...もういい...やっと本当にできるようになりました私はとても喜んで、誇りに思って、とても興奮しています.
考えの転換が重要らしい.実際、jobs[]の値をpython courseraのようにjsファイルに単独で抽出し、開き、for loopに戻りたいと思っていました.
jsファイルのリストが整理されず、エラーが続き、ファイルが見つからないエラーが発生し、クラッシュしました.ファイルは単独で作成しないでください.
ここでextract so job関数にjobs[]に格納してfor loopを返すと考えると,その後容易に解決できる.
考えを広げて,考えに閉じ込めないでください.自由に!
Reference
この問題について(ボーナスsqliteにデータを入れる), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhko1992/보너스-sqlite에-데이터-담기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import requests
import sqlite3
import json
import codecs
from bs4 import BeautifulSoup
# sqlite 를 사용하기 위해 필요할지도 모르는 모듈을 import 해온다.
def extract_job(html):
title = html.find("h2", {"class": "mb4"}).find("a")["title"]
company = html.find("h3", {"class":"fc-black-700"}).find("span").string.strip()
location = html.find("span", {"class": "fc-black-500"}).string.strip()
job_id = html["data-jobid"]
link = f"https://stackoverflow.com/jobs?id={job_id}&q=python"
return title,company,location,link
# 기존의 return은 중괄호 안에 보기좋게 저장되어있었다. dict의 tuple 형태로 말이다.
#근데 그렇게 저장하면 각각의 원소를 뽑아내기 힘들어진다. 그래서 위에 처럼 간소화 하자!
def extract_so_jobs(last_page):
conn = sqlite3.connect("C:\\Bitnami\\wampstack-7.4.6-1\\apache2\\htdocs\\scrapper.sqlite") # Mention the full path to where SQLite is located.
cur = conn.cursor()
cur.executescript('''
DROP TABLE IF EXISTS scrapper;
CREATE TABLE scrapper (title TEXT, company TEXT, location TEXT, link TEXT)
''')
# 두줄을 적으려면 executescript 함수를 사용할 것.
# SQL 문법과 python 안에서의 사용법은 구글링하면 자세하게 알 수 있으므로 생략하겠다.
jobs = []
for page in range(1):
print(f"Scrapping SO Page:{page}")
result = requests.get(f"{URL}&pg={page + 1}")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class":"-job"} )
for result in results:
job = extract_job(result)
jobs.append(job)
# 또 다시 for loop을 만들어준다 jobs 리스트를 순회하기 위해서.
for data in jobs:
title = data[0]
company = data[1]
location = data[2]
link = data[3]
cur.execute('''INSERT INTO scrapper (title, company, location, link)
VALUES ( ?, ?, ?, ? )''', ( title, company, location, link ) )
conn.commit()
cur.close()
return jobs
# 생각보다 간단했지만 이걸 알아내기까지 많은 시행착오를 겪었다.
Reference
この問題について(ボーナスsqliteにデータを入れる), 我々は、より多くの情報をここで見つけました https://velog.io/@yhko1992/보너스-sqlite에-데이터-담기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol