Как автоматически перевернуть страницу и сканировать больше данных в Stack Overflow (Python)? - PullRequest
1 голос
/ 17 марта 2019

Я хочу сканировать URL-адреса вопросов / ответов в переполнении стека с тегом Android Studio для исследовательских целей.На сайте должно быть около 55 628 вопросов: https://stackoverflow.com/questions/tagged/android-studio?sort=newest&page=1&pagesize=15

Однако я могу сканировать только 50 вопросов.Он заканчивается сканированием в середине четвертой страницы

Я чувствую, что должен написать для цикла , чтобы выполнить итерацию URL, но я не могу представить, где сначала пересмотреть.Как пересмотреть мою программу?

import requests
from bs4 import BeautifulSoup
import re
import json

class Stack(object):

    def __init__(self):
        self.baseurl = "https://stackoverflow.com"
        self.starturl = "https://stackoverflow.com/questions/tagged/android-studio"

        # The second page's URL: https://stackoverflow.com/questions/tagged/android-studio?sort=newest&page=2&pagesize=15
        # The third page's URL: https://stackoverflow.com/questions/tagged/android-studio?sort=newest&page=3&pagesize=15


    def start_requests(self, url):
        r = requests.get(url)
        return r.content


    def parse(self, text):
        soup = BeautifulSoup(text, 'html.parser')
        divs = soup.find_all('div', class_ = 'question-summary')

        for div in divs:
            div.find('div', class_ = 'summary').find_all('div')[1].find_all('a')


            yield {
            'title': div.h3.a.text,
            'url': self.baseurl + div.h3.a.get('href')
            }


    def start(self):
        text = self.start_requests(self.starturl) #呼叫function start_requests
        items = self.parse(text)

        s = json.dumps(list(items), indent = 4, ensure_ascii=False)
        with open('stackoverflow.json', 'w', encoding = 'utf-8') as f:
            # If answer is nonempty
            f.write(s)

stack = Stack()
stack.start()
...