Reddit 데이터를 긁는 방법: 게시물, 이미지, 댓글 등.
36978 단어 apiwebscrapingtutorial
소개
Reddit.com은 투표를 통해 사이트 회원이 콘텐츠를 사회적으로 큐레이팅하고 홍보하는 소셜 뉴스 웹사이트 및 포럼입니다.
이 기사에서는 Page2API으로 Reddit 게시물과 댓글을 스크랩하는 가장 쉬운 방법에 대해 읽고 Python에서 몇 가지 코드 예제를 찾을 수 있습니다.
Reddit을 스크랩하기 위해 우리는 PRO처럼 웹을 스크랩하는 데 도움이 되는 강력하고 유쾌한 API인 Page2API를 사용할 것입니다.
;
전제 조건
Reddit 게시물 스크래핑을 시작하려면 다음이 필요합니다.
스크래핑 프로세스를 더 쉽게 만들기 위해 HTML 구조가 더 간단한 이전 Reddit UI를 사용합니다.
이 기사에서는 BMW 하위 레딧을 스크랩합니다.
;
Reddit 게시물을 긁는 방법
가장 먼저 필요한 것은 하위 레딧 URL을 여는 것입니다.
https://old.reddit.com/r/BMW/
URL은 스크래핑을 수행하는 데 필요한 첫 번째 매개변수입니다.
표시되는 페이지는 다음과 같아야 합니다.
페이지 HTML을 검사하면 단일 결과가 다음과 같은 요소로 래핑되어 있음을 알 수 있습니다.
이 페이지에서 각 Reddit 게시물의 다음 속성을 스크랩합니다.
이제 각 속성에 대한 선택자를 정의하겠습니다.
/* Parent: */
.thing[data-promoted=false]
/* Title */
a.title
/* URL */
a.title
/* Thumbnail */
a.thumbnail img
/* Submitted */
time
/* Author */
a.author
/* Author URL */
a.author
/* Comments */
(parent div, attribute: data-comments-count)
/* Rank */
(parent div, attribute: data-rank
/* Score */
(parent div, attribute: data-score
이제 페이지 매김을 처리해 봅시다.
다음 페이지 버튼을 클릭하여 Reddit 페이지를 반복합니다.
다음 페이지로 이동하려면 페이지에 있는 경우 다음 페이지 링크를 클릭해야 합니다.
document.querySelector('.next-button a').click()
스크래핑은 페이지에 다음 링크가 있는 동안 계속되며 사라지면 중지됩니다.
스크레이퍼의 중지 조건은 다음 자바스크립트 스니펫입니다.
document.querySelector('.next-button a') === null
이 하위 레딧에서 필요한 페이지를 스크랩하는 요청을 작성해 보겠습니다.
다음 예는 Reddit.com에서 5페이지의 게시물을 스크랩하는 방법을 보여줍니다.
페이로드는 다음과 같습니다.
{
"api_key": "YOUR_PAGE2API_KEY",
"url": "https://old.reddit.com/r/BMW/",
"merge_loops": true,
"real_browser": true,
"scenario": [
{
"loop": [
{ "wait_for": ".thing" },
{ "execute": "parse" },
{ "click": ".next-button a" }
],
"stop_condition": "document.querySelector('.next-button a') === null",
"iterations": 5
}
],
"parse": {
"posts": [
{
"_parent": ".thing[data-promoted=false]",
"title": "a.title >> text",
"url": "a.title >> href",
"thumbnail": "a.thumbnail img >> src",
"submitted": "time >> datetime",
"author": "a.author >> text",
"author_url": "a.author >> href",
"comments": "_parent >> data-comments-count",
"rank": "_parent >> data-rank",
"score": "_parent >> data-score"
}
]
}
}
파이썬 코드 예제
import requests
import json
api_url = 'https://www.page2api.com/api/v1/scrape'
The following example will show how to scrape 5 pages of posts from Reddit.com
payload = {
"api_key": "YOUR_PAGE2API_KEY",
"url": "https://old.reddit.com/r/BMW/",
"merge_loops": True,
"real_browser": True,
"scenario": [
{
"loop": [
{ "wait_for": ".thing" },
{ "execute": "parse" },
{ "click": ".next-button a" }
],
"stop_condition": "document.querySelector('.next-button a') === null",
"iterations": 5
}
],
"parse": {
"posts": [
{
"_parent": ".thing[data-promoted=false]",
"title": "a.title >> text",
"url": "a.title >> href",
"thumbnail": "a.thumbnail img >> src",
"submitted": "time >> datetime",
"author": "a.author >> text",
"author_url": "a.author >> href",
"comments": "_parent >> data-comments-count",
"rank": "_parent >> data-rank",
"score": "_parent >> data-score"
}
]
}
}
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
response = requests.post(api_url, data=json.dumps(payload), headers=headers)
result = json.loads(response.text)
print(result)
결과
{
"result": {
"posts": [
{
"title": "Thought you would enjoy this",
"url": "https://old.reddit.com/r/BMW/comments/uu50bl/thought_you_would_enjoy_this/",
"thumbnail": "https://b.thumbs.redditmedia.com/1OMVuKzvOeVi6IkOMc1K94HzPOLs3InozhCPlxU8K7E.jpg",
"submitted": "2022-05-20T18:55:11+00:00",
"author": "L9FanboyXD",
"author_url": "https://old.reddit.com/user/L9FanboyXD",
"comments": "206",
"rank": "1",
"score": "1234"
},
{
"title": "Totalled..",
"url": "https://old.reddit.com/r/BMW/comments/uu7yih/totalled/",
"thumbnail": "https://b.thumbs.redditmedia.com/QQ7_MbJqhB5t4QfKJjbTFU4sEK0Cd9Cy5uFCSzzeLzM.jpg",
"submitted": "2022-05-20T21:16:40+00:00",
"author": "Conscious_Champion35",
"author_url": "https://old.reddit.com/user/Conscious_Champion35",
"comments": "130",
"rank": "2",
"score": "375"
},
{
"title": "Joined the squad. Yes there was a flat bed at the dealer as I was closing this deal today.",
"url": "https://www.reddit.com/gallery/uucgb5",
"thumbnail": "https://b.thumbs.redditmedia.com/g8vAVq0N59R0a-IX1mBtM1YEy2gouhhGTTS7m4Nr8us.jpg",
"submitted": "2022-05-21T01:16:08+00:00",
"author": "restloy",
"author_url": "https://old.reddit.com/user/restloy",
"comments": "22",
"rank": "3",
"score": "157"
}, ...
]
}, ...
}
;
Reddit 댓글을 긁는 방법
이전 단계의 게시물 URL을 열어야 합니다.
이렇게 하면 브라우저 URL이 다음과 유사하게 변경됩니다.
https://old.reddit.com/r/BMW/comments/uu50bl/thought_you_would_enjoy_this/
이 URL은 Reddit 게시물 데이터와 댓글을 스크랩하는 데 필요한 첫 번째 매개변수입니다.
표시되는 댓글 섹션은 다음과 같아야 합니다.
이 페이지에서 다음 속성을 스크랩합니다.
포스트 데이터:
댓글 데이터:
이제 각 속성에 대한 선택자를 정의하겠습니다.
포스트 데이터
/* Title */
a.title
/* Image */
.media-preview-content img.preview
댓글 데이터
/* Parent */
.entry
/* Author */
a.author
/* Author URL */
a.author
/* Posted */
time
/* Score */
.score.unvoted
/* ID */
input[name=thing_id]
/* Content */
.usertext-body
Reddit 게시물 페이지에서 데이터를 스크랩할 요청을 준비할 때입니다.
스크래핑 요청의 페이로드는 다음과 같습니다.
{
"api_key": "YOUR_PAGE2API_KEY",
"url": "https://old.reddit.com/r/BMW/comments/urv3mr/i_saw_it_in_prague_the_red_is_much_prettier_in/",
"parse": {
"title": "a.title >> text",
"image": ".media-preview-content img.preview >> src",
"comments": [
{
"_parent": ".entry",
"author": "a.author >> text",
"author_url": "a.author >> href",
"posted": "time >> datetime",
"score": ".score.unvoted >> text",
"id": "input[name=thing_id] >> value",
"content": ".usertext-body >> text"
}
]
}
}
파이썬 코드 예시:
import requests
import json
api_url = 'https://www.page2api.com/api/v1/scrape'
payload = {
"api_key": "YOUR_PAGE2API_KEY",
"url": "https://old.reddit.com/r/BMW/comments/urv3mr/i_saw_it_in_prague_the_red_is_much_prettier_in/",
"parse": {
"title": "a.title >> text",
"image": ".media-preview-content img.preview >> src",
"comments": [
{
"_parent": ".entry",
"author": "a.author >> text",
"author_url": "a.author >> href",
"posted": "time >> datetime",
"score": ".score.unvoted >> text",
"id": "input[name=thing_id] >> value",
"content": ".usertext-body >> text"
}
]
}
}
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
response = requests.post(api_url, data=json.dumps(payload), headers=headers)
result = json.loads(response.text)
print(result)
결과:
{
"result": {
"title": "I saw it in prague. the red is much prettier in real life",
"image": "https://preview.redd.it/91x8qz36f3091.jpg?width=1023&auto=png&s=9c0aced50d6743989f053cf9cc78c896f928d8a7",
"comments": [
{
"author": "DarkMeta81",
"author_url": "https://old.reddit.com/user/DarkMeta81",
"posted": "2022-05-17T20:12:31+00:00",
"score": "15 points",
"id": "t1_i8zlp77",
"content": "i was on vacation and prague is full of beautiful bmw this m5 is great"
},
{
"author": "Id-atl",
"author_url": "https://old.reddit.com/user/Id-atl",
"posted": "2022-05-18T01:06:15+00:00",
"score": "5 points",
"id": "t1_i90on16",
"content": "Wow imagine being in Prague ripping this around!"
}, ...
]
}, ...
}
;
결론
그게 다야!
이 기사에서는 모든 번거로움을 처리하고 필요한 데이터를 쉽게 얻을 수 있는 웹 스크래핑 API인 Page2API를 사용하여 Reddit.com에서 데이터를 스크랩하는 방법을 배웠습니다.
원본 기사는 여기에서 찾을 수 있습니다.
https://www.page2api.com/blog/how-to-scrape-reddit/
Reference
이 문제에 관하여(Reddit 데이터를 긁는 방법: 게시물, 이미지, 댓글 등.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nrotaru/how-to-scrape-reddit-data-posts-images-comments-and-more-191c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)