Есть ли способ сделать l oop через страницы на сайте javascript для анализа с использованием запросов или Beautifulsoup? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь пролистать страницы для извлечения финансовых данных с сайта недвижимости. Я могу только разобрать 20-е свойство и не могу go дальше. Я пытаюсь записать номер страницы в URL и передать Startposition в качестве аргумента сеанса запросов, но, похоже, он не работает. Я хотел бы проанализировать цену, доход и адрес всех свойств. Это то, что у меня есть до сих пор. Печать с комментариями предназначена только для проверки работоспособности списков.

import requests
from bs4 import BeautifulSoup

with requests.Session() as session:
    session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) 
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
    session.get('https://www.centris.ca/fr/duplex~a-vendre~montreal-rive-sud?view=Thumbnail&uc=3')
while True:
    # get page
    url = 'https://www.centris.ca/fr/duplex~a-vendre~montreal-rive-sud?view=Thumbnail&uc=3'
    response = session.post(url, data={"startPosition":str(24)})

    r = requests.get(url)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    a_tags = soup.find_all('span')
    span = soup.select_one('div.plex-revenue')
    location = soup.select_one('div.address')
    profitable_list = []
    revenue_list = []
    price_list = []
    address_list = []

    #print(soup)
    count1 = 0
    for link in a_tags:
        if link.get('content') == None:
            continue
        else:
            #print(link.get('content'))
            price_list.append(link.get('content'))
            count1 += 1
    #print(count1)
    #print(price_list)

    count2 = 0
    for span in soup.select('div.plex-revenue'):
        ram = span.select_one('span').text
        ram = ram[18:]
        ram = ram[:-2]
        ram = ram.replace(' ', '')
        revenue_list.append(int(ram))
        count2 += 1
    #print(revenue_list)

    for location in soup.select('span.address'):
        address = ''
        #for line in soup.select_one(div.)
        ram1 = location.select('div')
        for ram2 in ram1:
            address += ram2.text
        address_list.append(address)
        #print(ram2.text)
        #print()
    #print(count2)
    print(address_list)
    print(len(address_list))

    for index in range(len(price_list)):
        if (int(revenue_list[index]) / int(price_list[index])) >= 0.08:
            profitable_list.append(address_list[index])

    #print(profitable_list)
    #print(len(profitable_list))
"""
...