Stack Exchange Thread
Parse a single Stack Exchange question page into structured JSON with the question body, every answer and comment, score, accepted state, author, reputation, and timestamps.
API usage
Add &scraper=stackexchange-thread to a Crawling API request. URL-encode the target URL in the url parameter.
curl 'https://api.crawlbase.com/?token=YOUR_TOKEN' \
--data-urlencode 'url=https://stackoverflow.com/questions/2861071/how-to-modify-a-text-file' \
--data-urlencode 'scraper=stackexchange-thread' -Gfrom crawlbase import CrawlingAPI
api = CrawlingAPI({'token': 'YOUR_TOKEN'})
res = api.get(
'https://stackoverflow.com/questions/2861071/how-to-modify-a-text-file',
{'scraper': 'stackexchange-thread'}
)
import json
data = json.loads(res['body'])const { CrawlingAPI } = require('crawlbase');
const api = new CrawlingAPI({ token: 'YOUR_TOKEN' });
const res = await api.get(
'https://stackoverflow.com/questions/2861071/how-to-modify-a-text-file',
{ scraper: 'stackexchange-thread' }
);
const data = JSON.parse(res.body);require 'crawlbase'
api = Crawlbase::API.new(token: 'YOUR_TOKEN')
res = api.get('https://stackoverflow.com/questions/2861071/how-to-modify-a-text-file', scraper: 'stackexchange-thread')
data = JSON.parse(res.body)Example input URL
Any Stack Exchange question URL works in the url parameter, from any site in the network. For example:
https://stackoverflow.com/questions/2861071/how-to-modify-a-text-file
https://superuser.com/questions/441895/automate-opening-html-and-printing-to-pdf
https://askubuntu.com/questions/1206658/why-is-apt-held-back
https://serverfault.com/questions/439471/which-openvpn-cipher-should-i-use
https://mathoverflow.net/questions/44265/is-the-riemann-hypothesisResponse shape
JSON response body. Field types may be null when the source page omits the value.
The question itself.
Stack Exchange question id.
Question title.
Canonical URL of the question.
Question body text.
Question score (upvotes minus downvotes).
Number of views on the question.
Tags applied to the question.
Question creation time (ISO 8601).
Author of the question.
Display name of the question author.
Profile URL of the question author.
Reputation score of the question author.
Comments on the question.
Comment id.
Comment score.
Comment text.
Display name of the comment author.
Profile URL of the comment author.
Comment creation time (ISO 8601).
Number of answers returned in
answers.Answers to the question, in listing order.
Answer id.
Answer score (upvotes minus downvotes).
True when this is the accepted answer.
Answer body text.
Author of the answer.
Display name of the answer author.
Profile URL of the answer author.
Reputation score of the answer author.
Answer creation time (ISO 8601).
Comments on the answer.
Comment id.
Comment score.
Comment text.
Display name of the comment author.
Profile URL of the comment author.
Comment creation time (ISO 8601).
Sample response
{
"question": {
"id": "2861071",
"title": "How to modify a text file?",
"url": "https://stackoverflow.com/questions/2861071/how-to-modify-a-text-file",
"body": "I'm using Python and I need to insert a line at the start of a text file without loading the whole file into memory. Is there a way to do this in place, or do I have to rewrite the file?",
"score": 312,
"viewCount": 486201,
"tags": ["python", "file", "text-files"],
"askedAt": "2010-05-18T20:11:33Z",
"author": {
"name": "Nathan Fellman",
"url": "https://stackoverflow.com/users/8460/nathan-fellman",
"reputation": 127843
},
"comments": [
{
"id": "2954120",
"score": 3,
"body": "Do you need to preserve the original file, or is rewriting acceptable?",
"author": "Greg Hewgill",
"authorUrl": "https://stackoverflow.com/users/893/greg-hewgill",
"createdAt": "2010-05-18T20:19:04Z"
}
]
},
"answerCount": 2,
"answers": [
{
"id": "2861108",
"score": 401,
"isAccepted": true,
"body": "You cannot insert into the middle of a file without rewriting it. Read the file into a list of lines, insert your new line, then write it all back:\n\n with open('file.txt') as f:\n lines = f.readlines()\n lines.insert(0, 'new first line\\n')\n with open('file.txt', 'w') as f:\n f.writelines(lines)\n",
"author": {
"name": "Roberto Bonvallet",
"url": "https://stackoverflow.com/users/193568/roberto-bonvallet",
"reputation": 30215
},
"createdAt": "2010-05-18T20:15:52Z",
"comments": [
{
"id": "2954260",
"score": 12,
"body": "For very large files, stream through a temporary file instead of holding everything in memory.",
"author": "John Machin",
"authorUrl": "https://stackoverflow.com/users/253537/john-machin",
"createdAt": "2010-05-18T21:02:11Z"
}
]
},
{
"id": "2861180",
"score": 47,
"isAccepted": false,
"body": "If the file is large, use fileinput with inplace=True to edit it line by line without loading it all at once.",
"author": {
"name": "codeape",
"url": "https://stackoverflow.com/users/18770/codeape",
"reputation": 98412
},
"createdAt": "2010-05-18T20:24:39Z",
"comments": []
}
]
}