Не удалось найти ответ с помощью запроса. Но вы можете использовать Selenium. Сначала распечатайте количество вопросов при первой загрузке, затем отправьте клавишу End для имитации прокрутки вниз. Вы можете видеть, что количество вопросов изменилось с 20 до 40 после отправки ключа завершения.
Я использовал driver.impлыly подождать 5 секунд, прежде чем снова загружать DOM, в случае, если сценарий загружается слишком быстро, прежде чем загружается DOM. Вы можете улучшить, используя ЕС с селеном.
Страница загружает 20 вопросов за прокрутку. Так что, если вы ищете 100 вопросов, вам нужно отправить ключ завершения 5 раз.
Для использования кода ниже вам необходимо установить chromedriver. http://chromedriver.chromium.org/downloads
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
CHROMEDRIVER_PATH = ""
CHROME_PATH = ""
WINDOW_SIZE = "1920,1080"
chrome_options = Options()
# chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
chrome_options.binary_location = CHROME_PATH
prefs = {'profile.managed_default_content_settings.images':2}
chrome_options.add_experimental_option("prefs", prefs)
url = "https://www.quora.com/topic/Stack-Overflow-4/all_questions"
def scrape(url, times):
if not url.startswith('http'):
raise Exception('URLs need to start with "http"')
driver = webdriver.Chrome(
executable_path=CHROMEDRIVER_PATH,
chrome_options=chrome_options
)
driver.get(url)
counter = 1
while counter <= times:
q_list = driver.find_element_by_class_name('TopicAllQuestionsList')
questions = [x for x in q_list.find_elements_by_xpath('//div[@class="pagedlist_item"]')]
q_len = len(questions)
print(q_len)
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.END)
wait = WebDriverWait(driver, 5)
time.sleep(5)
questions2 = [x for x in q_list.find_elements_by_xpath('//div[@class="pagedlist_item"]')]
print(len(questions2))
counter += 1
driver.close()
if __name__ == '__main__':
scrape(url, 5)
Обычно его называют условным оператором , и при использовании так:
condition ? result_if_true : result_if_false
... если условие
оценивается как true
, выражение оценивается как result_if_true
, в противном случае оно оценивается как result_if_false
.
Это синтаксический сахар , и в данном случае, его можно заменить на
int qempty()
{
if(f == r)
{
return 1;
}
else
{
return 0;
}
}
Примечание: Некоторые люди называют ?:
его как « троичный оператор », потому что это единственный троичный оператор (то есть оператор, который принимает три аргумента) на языке, который они используют.
Это троичный оператор, он в основном встроенный, если оператор
x ? y : z
работает подобно
if(x) y else z
, за исключением того, что вместо операторов у вас есть выражения; так что вы можете использовать его в середине более сложного оператора.
Это полезно для написания краткого кода, но может быть чрезмерно использовано для создания трудно поддерживаемого кода.
Вы можете просто переписать его как:
int qempty(){ return(f==r);}
Что делает то же самое, что сказано в других ответах.
Он называется условным оператором .
Его можно заменить на:
int qempty(){
if (f == r) return 1;
else return 0;
}
Это условный оператор.
a? b: c
Это сокращение для IF / THEN / ELSE.
означает: если a истинно, вернуть b, иначе вернуть c. В этом случае, если f == r, вернуть 1, иначе вернуть 0.
Знак вопроса является условным оператором. Код означает, что если f == r, то возвращается 1, в противном случае возвращается 0. Код может быть переписан как
int qempty()
{
if(f==r)
return 1;
else
return 0;
}
, что, вероятно, не самый чистый способ сделать это, но, надеюсь, поможет вашему пониманию.