반응형
다음 메인 화면에 있는 것만 봐서는 내용이 그리 많이 나오지 않는 것 같다. 그래서 이번에는 다음 뉴스중에서 랭킹 뉴스를 스크랩 하는 sciprt 을 구성해 보기로 한다.
#coding=utf-8
#
import json
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import ssl
import requests
import datetime
def daumResult():
print('')
now = datetime.datetime.now()
rValue = '''
<div align="center">자료수집 일시 : {0}</div>
<div></div>
<br></br>
'''.format(now)
context = ssl._create_unverified_context()
url = 'https://news.daum.net/ranking/popular'
html = urllib.request.urlopen(url, context=context).read()
soup = BeautifulSoup(html, 'html.parser')
hrefAll = []
srcAll = []
altAll = []
infoAll = []
descAll = []
items = soup.find_all(class_="link_thumb") # link_thumb info_news desc_thumb
for item in items:
hrefAll.append(item['href'])
img = BeautifulSoup(item.decode_contents(), 'html.parser')
imgsrc = img.find('img')
srcAll.append(imgsrc['src'])
altAll.append(imgsrc['alt'])
items = soup.find_all(class_="info_news") # link_thumb info_news desc_thumb
for item in items:
info = BeautifulSoup(item.decode_contents(), 'html.parser')
infoAll.append(info)
items = soup.find_all(class_="desc_thumb") # link_thumb info_news desc_thumb
for item in items:
desc = BeautifulSoup(item.decode_contents(), 'html.parser')
descSrc = desc.find('span')
descAll.append(descSrc.get_text().strip())
tr_add = "";
print(len(hrefAll))
for idx in range(1, (len(hrefAll))+1):
try:
tr_add += '''
<a href="{0}" target="_blank"><div>{1} -{2}-</div>
<div><img src="{3}" alt="{4}"/></div>
<div>{5}</div></a>
<br></br>
'''.format(str(hrefAll[idx]), str(altAll[idx]), str(infoAll[idx]), str(srcAll[idx]), str(altAll[idx]), descAll[idx])
if idx % 10 == 0:
tr_add += '''
<figure class="ad-wp" contenteditable="false" data-ke-type="revenue" data-ad-vendor="adsense" data-ad-id-pc="74706" data-ad-id-mobile="74709"></figure>
'''
except:
pass
end_tag = '''
<br></br>
<div> 이 글은 python script 을 이용하여 다음(www.daum.net) 메인 내용을 수집한 자료 입니다. </div>
'''
return rValue + tr_add + end_tag
blog_name = "a......ting"
client_id = "be43b5.........................3286e"
seckey = "be43b5c08..............................983c7915"
callback_url = "http://autoposting.tistory.com"
getUrl = 'https://www.tistory.com/oauth/authorize?client_id={0}&redirect_uri={1}&response_type=code&state=someValue'
getUrl = getUrl.format(client_id, callback_url)
#res = requests.get(getUrl, verify=False)
#print(getUrl)
def sendPost(category):
url_post = "https://www.tistory.com/apis/post/write"
visibility = 3; # 0 미발행 3 발행
#category = 1;
tag = '자동글쓰기, python, 다음_메인뉴스'
acceptComment = 1
title = '이시간 랭킹 뉴스 (다음) (파이썬 자동 글쓰기) '
content = daumResult()
headers = {'Content-Type': 'application/json; charset=utf-8'}
params = {
'access_token': access_token,
'output': 'json',
'blogName': blog_name,
'title': title,
'content': content,
'visibility': visibility,
'category': category,
'published':'',
'slogan':'',
'tag': tag,
'acceptComment': acceptComment,
'password':''
}
data = json.dumps(params)
rw = requests.post(url_post, headers=headers, data=data)
if rw.status_code == 200:
print('ok')
else:
print('fail')
# 등록시 입력
# 그떄 마다 token 을 변경하면 다시 받아야 함.
def getToken():
code = "421872a.......................................5b71908"
token_url="https://www.tistory.com/oauth/access_token?client_id={0}&client_secret={1}&redirect_uri={2}&code={3}&grant_type=authorization_code".format(client_id, seckey, callback_url, code)
#res = requests.get(token_url, verify=False)
#access_token = res.text.split("=")[1]
#print(access_token)
access_token = 'be7c.............................................a0ee119d'
url_getCategory = "https://www.tistory.com/apis/category/list?access_token={0}&output={1}&blogName={2}".format(access_token, 'json', blog_name)
res = requests.get(url_getCategory)
for r in res.json()['tistory']['item']['categories']:
print(r['id'] + " " + r['name'] + " 갯수=" + r['entries'])
sendPost('504263') # 특정한 카테고리 선택하기 위해서
print('Job END ...')
이전에 게시된 다른 스크립트들 처럼 개인적인 정보는 .... 으로 마킹을 했다. 또한 이 스크립트를 이용해서 매일 아침에 랭킹 뉴스를 스크랩 할 것이다. 하루 한 번... 반복적으로 여러번 하고 싶기도 하지만, 뭐 그럴 필요까지는
스크랩 되어서 게시되는 모양이 이쁘지 않다면 html 코드을 이용해서 수정하면 될 것 같다.
다만, 주의가 필요해 보이는 것은 내용에 <a> 태크를 달아서 외부 링크를 사용하는 경우 이것이 많으면 광고을 유치(?)하기에는 무리가 따른다. 나의 글 보다 인용글이 많다는 의미로. 그래서 가급적이면 자동화를 하더라도 외부 인용은 자제(?)하는 것이 좋을 것 같다.
이걸루 또 한가지 스크랩 하는 기능을 구현 하였다.
반응형
'파이썬 스크립트' 카테고리의 다른 글
파이썬 자동화 스크립트 : 티스토리 글을 네이버블로그에 퍼 담아 보자 (2) | 2021.12.18 |
---|---|
파이썬 자동화 스크립트 : 인스타그램 사진 올리기. (0) | 2021.12.17 |
파이썬 으로 따라하는 자동화 스크립트 : 댓글에 답글 달기 (17) | 2021.12.15 |
파이썬으로 따라하는 자동화 스크립트 : daum.net 스크랩 해보기 (3) | 2021.12.14 |
파이썬 으로 따라하는 자동화 스크립트 : 공감 클릭하기 (6) | 2021.12.13 |