Как сканировать данные с веб-сайта и добавлять их в таблицу Excel - PullRequest
0 голосов
/ 07 мая 2019

Мне нужно провести исследование рынка недвижимости, для этого мне нужны цены и другие ценности новых домов.

Так что моя идея состояла в том, чтобы перейти на сайт, где я получаю информацию. Перейдите на главную страницу поиска и найдите все идентификаторы RealEstateID, которые приведут меня непосредственно к отдельным страницам каждого дома, где я смогу извлечь нужную информацию. У меня две проблемы: Во-первых, на сайте около 60 идентификаторов, но я получаю только около 20. Во-вторых, формат электронной таблицы Excel помещает заголовки столбцов над каждой записью, а каждая запись - только в одной ячейке, а не в разных столбцах.

Если бы кто-то мог объяснить мне, как я могу решить эти проблемы и сказать, что я сделал неправильно, я был бы очень рад услышать это

import requests
import json
from bs4 import BeautifulSoup as bs
import datetime as dt 
import os
import pandas as pd 
import pandas_datareader.data as web
import re
import time
import urllib.request
from urllib.request import urlopen
import csv

res = requests.get('https://www.immobilienscout24.de/Suche/S-T/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true?enteredFrom=result_list') #This is the main search site where I get the IDs
soup = bs(res.content, 'lxml')
r = re.compile(r'resultListModel:(.*)')
data = soup.find('script', text=r).text
script = r.findall(data)[0].rstrip(',')
results = json.loads(script)
ids = [item['@id'] for item in results['searchResponseModel']['resultlist.resultlist']['resultlistEntries'][0]['resultlistEntry']] #This should get me the IDs and put it into a list so i can use it later
print(ids) #My test that I get all the IDs and not just a few

data = json.dumps(ids)
houseinfo = {} 

csvData = [['id','purchasePrice','Spacesize','District','Flattyp','Rooms']] #Dataformat for the Excel-Spreadsheet colums later

def get_house_info (House):                                                 #this is the function that inserts the IDs from the List into the URLs and than scraps the Values that I need into a new list
    for id in ids:
        try:
            sourceCode = urllib.request.urlopen('https://www.immobilienscout24.de/expose/' + str(id)).read()
            purchasePrice = str(sourceCode).split('"purchasePrice":')[1].split(',"geoCode"')[0]
            Spacesize = str(sourceCode).split('"area":')[1].split('},"details"')[0]
            District = str(sourceCode).split('"quarter":')[1].split('},')[0]
            Flattyp = str(sourceCode).split('"is24qa-typ grid-item three-fifths">')[1].split('</dd> </dl> <dl class')[0]
            Rooms = str(sourceCode).split('is24qa-zimmer grid-item three-fifths"> ')[1].split(' </dd> </dl> <dl class=')[0]

            with open('foo.csv', 'a') as csvfile:                           #appends the values to the file
                cols = ['id', 'price', 'size', 'district', 'flattyp', 'rooms']
                dict_result = {'id': id, 'price': purchasePrice, 'size': Spacesize, 'district': District, 'flattyp': Flattyp, 'rooms': Rooms}
                writer = csv.DictWriter(csvfile, fieldnames=cols)
                writer.writeheader()
                writer.writerow(dict_result)

            csvfile.close()



        except Exception as e:

            print("failed in the main loop", str(e))

get_house_info(ids)

1 Ответ

0 голосов
/ 07 мая 2019

Я не могу точно сказать о вашем коде, но вам могут пригодиться следующие ссылки: 1. "Соскреб в Интернете на Python", видео из 4-й части Data School YouTube Channel.

...