TIL|Pythonの追加&Webスクリプトの作成#1
27848 ワード
パイ
-とても美しいプログラミング言語です!初心者にもわかりやすい
-javaがWebに集中している場合、pythonはデータ科学、機械学習などの分野でより多くの通信を行うことができます.
n/a.理論
Pythonルール
Pythonルール
:変数の命名に時間がかかる場合は、区切り記号を使用します.黙認する
(いずれも小文字で、1回ごとに)
変数タイプの適用
a_string = "Like this"
a_number = 3
a_float = 3.12
a_boolean = False
a none=None(Pythonのみ存在)
float小数点数、boolean真&偽
変数(変数):情報の配置位置、データの格納位置(等号左側)
用語
Sequence type
:リストされているlistのように、listはsequence typeの1つです.
:かっことオブジェクト""の単位で区切る
ex. days = ["Mon","Tue","Wed","Thur","Fri","sat"]
:immutable→変更不可シーケンス
nico = {"name": "Nico","age": 29,"korean": True,
"fav_food": ["Kimchi", "Sashimi"]}
print(nico["fav_food"])
関数#カンスウ#
:長さを印刷してください
def puls(a, b=0)
print(a + b)
def minus(a=0, b)
print(a - b)
plus(2)
minus(None, 2)
→パラメータ値が含まれていない場合はdefault valueと定義します.🤔 return関数の使用例
def plus(a, b):
return a + b
result = plus(2,4)
print(result)
def say_hello(name, age):
return f"Hello {name} you are {age} years old"
hello = say_hello("nico", "12")
print(hello)
パラメータの割り当て方法
:名前でペアリングします.ex.b=30, a=1
:パラメータを順番に付与します.(位置別)
https://docs.python.org/3/library/index.html
ドアが
<例1>
def plus(a, b):
if type(b) is str:
return None
else:
return a + b
# is -> object identity
# is not -> negated object identity
def plus(a, b):
if type(b) is not or type(b) is float:
return a + b
else:
return None
print(plus(12, 1.2))
文脈
-string、tupleまたはlistまたはその他のiterableオブジェクトが使用可能
days = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri')
for i in days:
if day is 'Wed':
break
else:
print(i)
Web scraperの作成
request package
:Python作成要求機能を統合
the power of Requestsr = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code
200
r.headers['content-type']
'application/json; charset=utf8'
r.encoding
'utf-8'
r.text
'{"type":"User"...'
r.json()
{'private_gists': 419, 'total_private_repos': 77, ...}
beautiful soup4
-htmlから情報を抽出するのに非常に有用なライブラリです.必要なデータを簡単に類似のデータカテゴリに分類します.
-https://www.crummy.com/software/BeautifulSoup/bs4/doc/(正式な文書を参照)
1.request packageを使用してHTMLを抽出
import requests
# requests 라이브러리 사용해서 HTML페이지 요청 -> indeed_resul 객체에 HTML 데이터 저장
indeed_resul = requests.get('https://kr.indeed.com/jobs?q=python&l=%EC%84%9C%EC%9A%B8&vjk=1015284880e2ff62')
print(indeed_resul)
print(indeed_resul.text) # 예시 1. html text 전부를 가져오고 싶은 경우
<Response [200]> # ok 라는 뜻
# text 전부 추출됨
2.Beatifulスープによるページング抽出
-まずページのhtml部分をチェックしますimport requests
from bs4 import BeautifulSoup # beatifulSoup 라이브러리 import
indeed_resul = requests.get('https://kr.indeed.com/jobs?q=python&l=%EC%84%9C%EC%9A%B8&vjk=1015284880e2ff62')
# beautifulsoup4 라이브러리 사용해서 HTML 파싱하기
# soup = BeautifulSoup(html_doc, 'html.parser')
indeed_soup = BeautifulSoup(indeed_resul.text, "html.parser")
# HTML 파싱 후 ul 태그 가져오기
# find 메소드를 통해서 태그를 검색할 수 있음 -> 하나의 tag 찾음
pagination = indeed_soup.find("ul", {"class":"pagination-list"})
# find_all은 조건에 맞는 모든 tag를 리스트로써 찾아줌
links = pagination.find_all('a')
pages = []
# a 내의 자식관계로 있는 span을 찾기 위함
# 이미 pages가 리스트로 for문 사용
for link in links:
pages.append(link.find("span"))
pages = pages[:-1]
print(pages)
[<span class="pn">2</span>, <span class="pn">3</span>, <span class="pn">4</span>, <span class="pn">5</span>]
3.最後のページング値の検索
import requests
from bs4 import BeautifulSoup
indeed_resul = requests.get('https://kr.indeed.com/jobs?q=python&l=%EC%84%9C%EC%9A%B8&vjk=1015284880e2ff62')
indeed_soup = BeautifulSoup(indeed_resul.text, "html.parser")
pagination = indeed_soup.find("ul", {"class":"pagination-list"})
links = pagination.find_all('a')
pages = []
# 예시 1
for link in links[:-1]:
pages.append(int(link.find("span").string))
# 예시 2
for link in links[:-1]:
pages.append(int(link.string))
# 예시 1과 2 모두 동일한 값이 나옴 -> 더 간단한 예시 2 사용
# 마지막 페이지 값 찾아주기
for link in links[:-1]:
pages.append(int(link.string))
max_page = pages[-1]
[2, 3, 4, 5]
5
4.各ページの要求に従って抽出とファイルのモジュール化
from indeed import extract_indeed_pages, extract_indeed_jobs
last_indeed_page = extract_indeed_pages()
extract_indeed_jobs(last_indeed_page)
200
200
200
200
200
import requests
from bs4 import BeautifulSoup
LIMIT = 50
URL = f"https://kr.indeed.com/%EC%B7%A8%EC%97%85?as_and=python&as_phr&as_any&as_not&as_ttl&as_cmp&jt=all&st&salary&radius=25&l=%EC%84%9C%EC%9A%B8&fromage=any&limit={LIMIT}"
def extract_indeed_pages():
resul = requests.get(URL)
soup = BeautifulSoup(resul.text, "html.parser")
pagination = soup.find("ul", {"class":"pagination-list"})
links = pagination.find_all('a')
pages = []
for link in links[:-1]:
pages.append(int(link.string))
max_page = pages[-1]
return max_page
def extract_indeed_jobs(last_page):
for page in range(last_page):
result = requests.get(f"{URL}&start={page * LIMIT}")
print(result.status_code)
Reference
この問題について(TIL|Pythonの追加&Webスクリプトの作成#1), 我々は、より多くの情報をここで見つけました
https://velog.io/@sihaha/TIL-파이썬-추가-웹스크래퍼-만들기-1
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code
200
r.headers['content-type']
'application/json; charset=utf8'
r.encoding
'utf-8'
r.text
'{"type":"User"...'
r.json()
{'private_gists': 419, 'total_private_repos': 77, ...}
import requests
# requests 라이브러리 사용해서 HTML페이지 요청 -> indeed_resul 객체에 HTML 데이터 저장
indeed_resul = requests.get('https://kr.indeed.com/jobs?q=python&l=%EC%84%9C%EC%9A%B8&vjk=1015284880e2ff62')
print(indeed_resul)
print(indeed_resul.text) # 예시 1. html text 전부를 가져오고 싶은 경우
<Response [200]> # ok 라는 뜻
# text 전부 추출됨
import requests
from bs4 import BeautifulSoup # beatifulSoup 라이브러리 import
indeed_resul = requests.get('https://kr.indeed.com/jobs?q=python&l=%EC%84%9C%EC%9A%B8&vjk=1015284880e2ff62')
# beautifulsoup4 라이브러리 사용해서 HTML 파싱하기
# soup = BeautifulSoup(html_doc, 'html.parser')
indeed_soup = BeautifulSoup(indeed_resul.text, "html.parser")
# HTML 파싱 후 ul 태그 가져오기
# find 메소드를 통해서 태그를 검색할 수 있음 -> 하나의 tag 찾음
pagination = indeed_soup.find("ul", {"class":"pagination-list"})
# find_all은 조건에 맞는 모든 tag를 리스트로써 찾아줌
links = pagination.find_all('a')
pages = []
# a 내의 자식관계로 있는 span을 찾기 위함
# 이미 pages가 리스트로 for문 사용
for link in links:
pages.append(link.find("span"))
pages = pages[:-1]
print(pages)
[<span class="pn">2</span>, <span class="pn">3</span>, <span class="pn">4</span>, <span class="pn">5</span>]
import requests
from bs4 import BeautifulSoup
indeed_resul = requests.get('https://kr.indeed.com/jobs?q=python&l=%EC%84%9C%EC%9A%B8&vjk=1015284880e2ff62')
indeed_soup = BeautifulSoup(indeed_resul.text, "html.parser")
pagination = indeed_soup.find("ul", {"class":"pagination-list"})
links = pagination.find_all('a')
pages = []
# 예시 1
for link in links[:-1]:
pages.append(int(link.find("span").string))
# 예시 2
for link in links[:-1]:
pages.append(int(link.string))
# 예시 1과 2 모두 동일한 값이 나옴 -> 더 간단한 예시 2 사용
# 마지막 페이지 값 찾아주기
for link in links[:-1]:
pages.append(int(link.string))
max_page = pages[-1]
[2, 3, 4, 5]
5
from indeed import extract_indeed_pages, extract_indeed_jobs
last_indeed_page = extract_indeed_pages()
extract_indeed_jobs(last_indeed_page)
200
200
200
200
200
import requests
from bs4 import BeautifulSoup
LIMIT = 50
URL = f"https://kr.indeed.com/%EC%B7%A8%EC%97%85?as_and=python&as_phr&as_any&as_not&as_ttl&as_cmp&jt=all&st&salary&radius=25&l=%EC%84%9C%EC%9A%B8&fromage=any&limit={LIMIT}"
def extract_indeed_pages():
resul = requests.get(URL)
soup = BeautifulSoup(resul.text, "html.parser")
pagination = soup.find("ul", {"class":"pagination-list"})
links = pagination.find_all('a')
pages = []
for link in links[:-1]:
pages.append(int(link.string))
max_page = pages[-1]
return max_page
def extract_indeed_jobs(last_page):
for page in range(last_page):
result = requests.get(f"{URL}&start={page * LIMIT}")
print(result.status_code)
Reference
この問題について(TIL|Pythonの追加&Webスクリプトの作成#1), 我々は、より多くの情報をここで見つけました https://velog.io/@sihaha/TIL-파이썬-추가-웹스크래퍼-만들기-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol