stackoverflow.comパッチワークとCSVを入れる
1.stackoverflowサイトのキャプチャ
indeed.comでブラシしたコードはほとんど差がありません.だから私は他のコードを少し見たいだけです.import requests
from bs4 import BeautifulSoup
URL ="https://stackoverflow.com/jobs?q=python&sort=i"
def so_last_page():
result = requests.get(URL)
soup = BeautifulSoup(result.text, "html.parser")
pagi = soup.find("div", {"class":"s-pagination"}).find_all("a")
last = pagi[-2].get_text(strip=True) #get_text() 함수를 이용해, pagi 안에 텍스트(페이지넘버)를 불러들이고 strip 해서 정리해줌.(이런식으로 strip=true를 인자로 사용가능)
return int(last)
# indeed 서 처럼 link에서 span을 다 뽑아서 리스트에 넣은다음 리스트 마지막 숫자만 뽑아내도 좋고
# 여기서 처럼 아예 링크 마지막 부분을 애초부터 뽑아내도 괜찮다.
def extract_job(html):
title = html.find("h2", {"class": "mb4"}).find("a")["title"]
company = html.find("h3", {"class":"fc-black-700"}).find("span").get_text(strip=True)
location = html.find("span", {"class": "fc-black-500"}).get_text(strip=True)
# strip=True 를 대입하지 않으면 띄어쓰기가 그대로 남아있게되어 듬성듬성 빈틈이 생긴다.
# 참고로 .string()/.strip() 함수로 태그안에 있는 텍스트만 깔끔하게 뽑아내려 했으나 get_text는 위의 함수와 incompatible 하기 때문에 사용하지 못했다.
job_id = html["data-jobid"]
link = f"https://stackoverflow.com/jobs?id={job_id}&q=python"
return {'Title': title ,
'Company': company ,
'location': location,
'link':link
}
私のような人は、なぜか分かりませんが、ニコとサイトhtmlのコード配列が違って使い方がない方法を書きたいです. <난 사용안했지만, 니코는 사용한것>
tuple unpacking(mutiple assignment)--알아보자!(밑에 계속)
장소와 회사변수를 각각 지정안해주고 한번에 지정할 수 있음
우선 다음과 같은 코드를 살펴보자
company,location = html.find("div", {"class": "-company"}).find_all("span",recursive=False)
recursive = false 는 무슨뜻이냐면, 안에 속해있는 모든 자손을 불러오지 말고 직계자손만, first level 만 불러옴!
예를 들어 아래와 같은 html 코드가 있다고 치고. 위에 코드를 쳤다고 치자.
<div class = -company >
<span class = a>
KIA
<span class = b>LOL</span>
</span>
<span class = a1>
KOREA
</span>
</div>
그럼 직계자손 span 만 불러오므로 결과값은 company = KIA, location = KOREA 가 된다.
CSVを入れる
これで2つのサイトのページパッチワークが完了しました.アクセルを入れることしか残っていません.アクセルはウィンドウでしか動作しないため、GOGLEがサポートするCSV形式でデータを格納できます.
まず、CSVは以下のような非常に単純な形式で構成される.title,company,location,link
DevOps - Principal Engineer,Innominds Software,"Bengaluru, India",https://stackoverflow.com/jobs?id=404137&q=python
DevOps Engineer,Star Knowledge,"Bengaluru, India",https://stackoverflow.com/jobs?id=404118&q=python
幸いなことに、Pythonはcsvモジュールをデフォルトでサポートしています.
まずはsave.pyファイルをそれぞれ作成し、次のコードを入力します.import csv
def save_to_file(jobs):
file = open("C:\python scraper\jobs.csv", mode="w" ,encoding = "utf-8-sig") # 파일 이름이 없으면 자동으로 파일 생성. 그리고 일본어,중국어 때문에 파일이 깨진다면 -sig를 encoding에 추가!
writer = csv.writer(file) # 만든 파일안애 데이터 입력
writer.writerow(["title", "company", "location", "link"]) # 요런 식으로
for job in jobs:
writer.writerow(list(job.values()))
# 그리고 긁어온 데이터를 jobs 인자를 이용해 하나씩 입력한다. 이때 긁어온 데이터들이 list 안에 들어있으므로 list를 입력해준다
# 아울러, 우리가 가져오려는 값이 "company" : "full stack python devloper" 라고 되어있다
# 이때 key,value 중 value 만 가져오려면 ~~.value 이런식으로 코드를 적으면 된다.
return
最終実行
ナイフもpyに新しく作成したファイルを追加し、モジュールを追加してモジュール内の関数を指定すると終了します!!from so import get_jobs as so_jobs
from indeed import get_jobs as indeed_jobs
from save import save_to_file
jobs = so_jobs() + indeed_jobs()
save_to_file(jobs)
では、csvファイルに次のデータが格納されていることがわかります.
Reference
この問題について(stackoverflow.comパッチワークとCSVを入れる), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhko1992/stackoverflow.com-긁어모으기-and-CSV안에-담기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import requests
from bs4 import BeautifulSoup
URL ="https://stackoverflow.com/jobs?q=python&sort=i"
def so_last_page():
result = requests.get(URL)
soup = BeautifulSoup(result.text, "html.parser")
pagi = soup.find("div", {"class":"s-pagination"}).find_all("a")
last = pagi[-2].get_text(strip=True) #get_text() 함수를 이용해, pagi 안에 텍스트(페이지넘버)를 불러들이고 strip 해서 정리해줌.(이런식으로 strip=true를 인자로 사용가능)
return int(last)
# indeed 서 처럼 link에서 span을 다 뽑아서 리스트에 넣은다음 리스트 마지막 숫자만 뽑아내도 좋고
# 여기서 처럼 아예 링크 마지막 부분을 애초부터 뽑아내도 괜찮다.
def extract_job(html):
title = html.find("h2", {"class": "mb4"}).find("a")["title"]
company = html.find("h3", {"class":"fc-black-700"}).find("span").get_text(strip=True)
location = html.find("span", {"class": "fc-black-500"}).get_text(strip=True)
# strip=True 를 대입하지 않으면 띄어쓰기가 그대로 남아있게되어 듬성듬성 빈틈이 생긴다.
# 참고로 .string()/.strip() 함수로 태그안에 있는 텍스트만 깔끔하게 뽑아내려 했으나 get_text는 위의 함수와 incompatible 하기 때문에 사용하지 못했다.
job_id = html["data-jobid"]
link = f"https://stackoverflow.com/jobs?id={job_id}&q=python"
return {'Title': title ,
'Company': company ,
'location': location,
'link':link
}
<난 사용안했지만, 니코는 사용한것>
tuple unpacking(mutiple assignment)--알아보자!(밑에 계속)
장소와 회사변수를 각각 지정안해주고 한번에 지정할 수 있음
우선 다음과 같은 코드를 살펴보자
company,location = html.find("div", {"class": "-company"}).find_all("span",recursive=False)
recursive = false 는 무슨뜻이냐면, 안에 속해있는 모든 자손을 불러오지 말고 직계자손만, first level 만 불러옴!
예를 들어 아래와 같은 html 코드가 있다고 치고. 위에 코드를 쳤다고 치자.
<div class = -company >
<span class = a>
KIA
<span class = b>LOL</span>
</span>
<span class = a1>
KOREA
</span>
</div>
그럼 직계자손 span 만 불러오므로 결과값은 company = KIA, location = KOREA 가 된다.
これで2つのサイトのページパッチワークが完了しました.アクセルを入れることしか残っていません.アクセルはウィンドウでしか動作しないため、GOGLEがサポートするCSV形式でデータを格納できます.
まず、CSVは以下のような非常に単純な形式で構成される.
title,company,location,link
DevOps - Principal Engineer,Innominds Software,"Bengaluru, India",https://stackoverflow.com/jobs?id=404137&q=python
DevOps Engineer,Star Knowledge,"Bengaluru, India",https://stackoverflow.com/jobs?id=404118&q=python
幸いなことに、Pythonはcsvモジュールをデフォルトでサポートしています.まずはsave.pyファイルをそれぞれ作成し、次のコードを入力します.
import csv
def save_to_file(jobs):
file = open("C:\python scraper\jobs.csv", mode="w" ,encoding = "utf-8-sig") # 파일 이름이 없으면 자동으로 파일 생성. 그리고 일본어,중국어 때문에 파일이 깨진다면 -sig를 encoding에 추가!
writer = csv.writer(file) # 만든 파일안애 데이터 입력
writer.writerow(["title", "company", "location", "link"]) # 요런 식으로
for job in jobs:
writer.writerow(list(job.values()))
# 그리고 긁어온 데이터를 jobs 인자를 이용해 하나씩 입력한다. 이때 긁어온 데이터들이 list 안에 들어있으므로 list를 입력해준다
# 아울러, 우리가 가져오려는 값이 "company" : "full stack python devloper" 라고 되어있다
# 이때 key,value 중 value 만 가져오려면 ~~.value 이런식으로 코드를 적으면 된다.
return
最終実行
ナイフもpyに新しく作成したファイルを追加し、モジュールを追加してモジュール内の関数を指定すると終了します!!from so import get_jobs as so_jobs
from indeed import get_jobs as indeed_jobs
from save import save_to_file
jobs = so_jobs() + indeed_jobs()
save_to_file(jobs)
では、csvファイルに次のデータが格納されていることがわかります.
Reference
この問題について(stackoverflow.comパッチワークとCSVを入れる), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhko1992/stackoverflow.com-긁어모으기-and-CSV안에-담기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from so import get_jobs as so_jobs
from indeed import get_jobs as indeed_jobs
from save import save_to_file
jobs = so_jobs() + indeed_jobs()
save_to_file(jobs)
Reference
この問題について(stackoverflow.comパッチワークとCSVを入れる), 我々は、より多くの情報をここで見つけました https://velog.io/@yhko1992/stackoverflow.com-긁어모으기-and-CSV안에-담기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol