티스토리는 rss 만 제공되는데 sitemap.xml 도 제공되면 좋겠네요~

무료로 사이트맵을 작성해주는 사이트가 있긴 하지만 불필요한 url 까지 생기는 문제가 있어서,

파이썬으로 한번 만들어 소스코드 공개합니다.

포스팅 주소가 숫자로 된 티스토리 블로그만 해당됩니다.

 

# coding=utf-8
from urllib2 import urlopen
from bs4 import BeautifulSoup
import xml.etree.ElementTree as xml
import time

BLOG_URL = 'https://ivps.tistory.com/' ### 블로그 주소
if ( BLOG_URL[len(BLOG_URL)-1] != '/' ):
  BLOG_URL += '/'
post_end = 0
html = urlopen(BLOG_URL)
soup = BeautifulSoup(html, "html.parser")
for hr in soup.findAll('a', {'class':'link_post'}):
  tmp = hr.get('href')[1:]
  if ( tmp != '' ):
    max = int( tmp )
    if ( post_end < max ):
      post_end = max
print "post_end " + str(post_end)

### SITEMAP XML Create
sitemap = xml.Element('urlset')
sitemap.set('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9')
print ('<?xml version=\'1.0\' encoding=\'utf-8\'?>')
print ('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">')
x1_1st = xml.SubElement(sitemap, 'url')
x2_lo = xml.SubElement(x1_1st, 'loc').text        = BLOG_URL
x2_ch = xml.SubElement(x1_1st, 'changefreq').text = 'always'
x2_pr = xml.SubElement(x1_1st, 'priority').text   = '1.0'
print ('<url><loc>' + BLOG_URL + '</loc><changefreq>always</changefreq><priority>1.0</priority></url>')
for i in range(post_end):
  url = BLOG_URL + str(i)
  try:
    html = urlopen(url)
    soup = BeautifulSoup(html, "html.parser")
    #print (soup.head.find("meta", {"name":"description"}).get('content'))
    x2_ur = xml.SubElement(sitemap, 'url')
    x3_lo = xml.SubElement(x2_ur, 'loc').text        = url
    x3_ch = xml.SubElement(x2_ur, 'changefreq').text = 'daily'
    x1_pr = xml.SubElement(x2_ur, 'priority').text   = '0.9'
    print ('<url><loc>' + url + '</loc><changefreq>daily</changefreq><priority>0.9</priority></url>')
  except:
    print (url + ' is not found')
  time.sleep(0.01)
print ('</urlset>')

#xml.dump(sitemap)
xml.ElementTree(sitemap).write('./sitemap.xml', encoding='utf-8', xml_declaration=True)

사용해 보시고 문제점이 있다면 댓글 남겨주세요~

생성된 파일을 공지사항에 첨부해놓고 해당 링크 주소를 웹마스터 도구에 제출하면 됩니다.

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

아파치 + 파이썬 연동 환경에서 파이썬으로 보낸 GET 및 POST 파라메터 값을 받는 방법입니다.

#!/usr/bin/env python
import cgi

print ("Content-type: text/html\n")
print ("p1 : " + cgi.FieldStorage()['p1'].value + "<br>")
print ("p2 : " + cgi.FieldStorage()['p2'].value + "<br>")

test.py?p1=v1&p2=v2

 

결과는 아래와 같이 나옵니다.

p1 : v1

P2 : v2

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

파이썬 urlopen 모듈에러

from urllib.request import urlopen
from bs4 import BeautifulSoup

위와 같이 작성하면 아래와 같은 에러가 납니다.

Traceback (most recent call last):
  File "t.py", line 2, in <module>
    from urllib.request import urlopen
ImportError: No module named request

urllib2 로 변경하면 됩니다.

from urllib2 import urlopen
from bs4 import BeautifulSoup

이제 다시 테스트 해보세요~

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

인코딩을 페이지에 맞는 euc-kr 또는 utf-8 로 바꿔주면 됩니다.

[root@ivps ~]# python
Python 2.7.5 (default, Apr  9 2019, 14:30:50)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> rs = req.session()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'req' is not defined
>>> rs = requests.session()
>>> post = rs.get('https://ivps.tistory.com/')
>>> print post.text
<!doctype html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>TISTORY</title>
    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/font.css">
    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/error.css">
</head>
<body>
<div id="kakaoIndex">
    <a href="#kakaoBody">본문 ���기</a>
    <a href="#kakaoGnb">�� ���기</a>
</div>
>>> post.encoding
'ISO-8859-1'
>>> post.encoding = 'utf-8'
>>> print post.text
<!doctype html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>TISTORY</title>
    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/font.css">
    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/error.css">
</head>
<body>
<div id="kakaoIndex">
    <a href="#kakaoBody">본문 바로가기</a>
    <a href="#kakaoGnb">메뉴 바로가기</a>
</div>

post.encoding = 'utf-8'

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[CentOS] Python PIP 설치

Python 2019. 8. 19. 09:41

[root@ivps ~]# pip
-bash: pip: command not found

[root@ivps ~]# yum install python-pip
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * epel: mirrors.aliyun.com
 * extras: mirror.kakao.com
 * remi-php72: mirror.innosol.asia
 * remi-safe: mirror.innosol.asia
 * updates: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package python2-pip.noarch 0:8.1.2-10.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package              Arch            Version               Repository     Size
================================================================================
Installing:
 python2-pip          noarch          8.1.2-10.el7          epel          1.7 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 1.7 M
Installed size: 7.2 M
Is this ok [y/d/N]: y
Downloading packages:
python2-pip-8.1.2-10.el7.noarch.rpm                        | 1.7 MB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python2-pip-8.1.2-10.el7.noarch                              1/1
  Verifying  : python2-pip-8.1.2-10.el7.noarch                              1/1

Installed:
  python2-pip.noarch 0:8.1.2-10.el7

Complete!

패키지가 없다고 나오면 epel-release 를 먼저 설치하세요~

 

블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[Python] 이미지 파일의 MIME TYPE 알아내는 방법



티스토리 같은 경우 이미지를 첨부하면 아래와 같이 확장자명이 생략이 됩니다.


<img src="https://t1.daumcdn.net/cfile/tistory/C81EA46998F0401423" style="cursor: pointer;max-width:100%;height:auto" width="820"/>


그래서 일단 해당 url 의 이미지를 로컬에 저장한 다음에 아래의 소스코드로 알아내면 됩니다.


import magic


mime_type = magic.from_file(filename, mime=True)

print('mime_type : ' + mime_type)


사전에 pip install python-magic 명령으로 해당 라이브러리를 먼저 설치하면 됩니다.


'Python' 카테고리의 다른 글

[Python] requests.get 한글깨짐  (0) 2019.08.19
[CentOS] Python PIP 설치  (0) 2019.08.19
[CentOS] 7.x Apache + Python 연동 방법  (0) 2018.12.21
[Python] sitemap.xml 생성 방법  (0) 2018.12.20
[Python] XML Create and Write  (0) 2018.12.18
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[CentOS] 7.x Apache + Python 연동 방법



아파치에서 파이썬도 동작이 가능합니다.


# vi /etc/httpd/conf.d/python.conf


<Directory /var/www/html/python>

  Options +ExecCGI

  AddHandler cgi-script .py

</Directory>



# systemctl restart httpd


# mkdir /var/www/html/python


# vi /var/www/html/python/index.py


#!/usr/bin/env python


print "Content-type: text/html\n"

print "Python test page"


# chmod 755 /var/www/html/python/index.py


이제 브라우저에서 한번 열어보세요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[Python] sitemap.xml 생성 방법


파이썬으로 사이트맵 파일을 만드는 방법입니다.

<?xml version='1.0' encoding='utf-8'?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <url>

    <loc>https://ivps.tistory.com</loc>

    <changefreq>always</changefreq>

    <priority>1.0</priority>

  </url>

</urlset>


위와 같은 파일을 파이썬으로 코딩하면 아래와 같습니다.

import xml.etree.ElementTree as xml


sitemap = xml.Element('urlset')

sitemap.set('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9')

x1_1st = xml.SubElement(sitemap, 'url')

x2_lo = xml.SubElement(x1_1st, 'loc').text = 'https://ivps.tistory.com'

x2_ch = xml.SubElement(x1_1st, 'changefreq').text = 'always'

x2_pr = xml.SubElement(x1_1st, 'priority').text = '1.0'

xml.ElementTree(sitemap).write('/var/www/html/sitemap.xml', encoding='utf-8', xml_declaration=True)

칼라 부분이 키포인트이네요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[Python] XML Create and Write


파이썬에서 XML 을 작성하는 방법입니다.

<rss version="2.0">

<channel>

<item>

<title>subject</title>

<title>description</title>

</item>

</channel>

</rss>


위와 같은 XML 을 만드는 코드입니다.

import xml.etree.ElementTree as xml


rss = xml.Element('rss')

rss.set('version', '2.0')

ch = xml.SubElement(rss, 'channel')

it = xml.SubElement(ch, 'item')

ti = xml.SubElement(it, 'title')

de = xml.SubElement(it, 'title')

ti.text = str('subject')

de.text = str('description')

xml.dump(rss)

xml.ElementTree(rss).write('rss.xml')

이 외에도 만드는 방법이 더 있습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[Python] 티스토리 Open API 활용 access_token 값 가져오기


티스토리 블로그를 백업 받기 위해서 Open API 를 활용하는 방법이 있습니다.

제일 먼저 해야되는게 access_token 값을 알아야 합니다.

토큰값은 브라우저에서 받아와도 되지만 1시간이 지나면 다시 받아야 하는 번거로움이 있습니다.

그리고 백업을 자동화 하려면 아무래도 Python 으로 프로그래밍을 하는게 나아보입니다.


제대로 설명된 곳이 없어서 저처럼 한참 헤매실 분들을 위해서 포스팅합니다.


redirectUrl 은 CallBack 값이고, client_id 는 App ID 값을 입력하면 됩니다.

import requests

import urlparse


URL_0 = 'https://www.tistory.com/auth/login'

URL_1 = 'https://www.tistory.com/oauth/authorize'

loginParams = {

 'redirectUrl':'http://ivps.tistory.com',

 'loginId':'이메일계정',

 'password':'비밀번호'

}

tokenParams = {

 'client_id':'App ID',

 'redirect_uri':'http://ivps.tistory.com',

 'response_type':'token'

}


rs = requests.session()

r1 = rs.post(URL_0, data=loginParams)

r2 = rs.get(URL_1, params=tokenParams)

print(r2.url)

access_token = str ( urlparse.parse_qs( r2.url.split('#')[1] )['access_token'][0] )

print(access_token)


파이썬이 처음이라면 아래와 같이 미리 설치를 해주어야 합니다.

# yum install python python-pip

# pip install requests


access_token 값이 알아내면 그 다음 부터는 하나씩 풀어나가면 될 것 같습니다.

다음에는 블로그 리스트를 가져오는 소스를 공개하도록 하겠습니다.

블로그백업 RSS 파일 생성 소스 : https://ivps.tistory.com/650


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,