具有不等长度数组python 3的web数据

时间:2017-07-08 10:16:52

标签: python arrays pandas numpy

以下是我搜索网站的代码。我必须使用不等长度的数组创建一个DataFrame,例如property_Type具有不同的长度,soe列表有一个property_type,有些有两个&有些人有三个。同样,代理商名称也有不同的长度。

import requests 
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np

urls = []

for i in range(1,3):
    pages = "http://www.realcommercial.com.au/for-sale/property-offices-retail-in-vic/list-{0}?includePropertiesWithin=includesurrounding&activeSort=list-date&autoSuggest=true".format(i)
    urls.append(pages)

Data = []

for info in urls:
    page = requests.get(info)
    soup = BeautifulSoup(page.content, 'html.parser')
    links = soup.find_all('a', attrs ={'class' :'details-panel'})
    hrefs = [link['href'] for link in links]

    for href in hrefs:
        pages = requests.get(href)
        soup_2 =BeautifulSoup(pages.content, 'html.parser')
        Address_1 = soup_2.find_all('p', attrs={'class' :'full-address'})
        Address = [Address.text.strip() for Address in Address_1]
        Prop_Type = soup_2.find_all('div', attrs={'class' :'propType ellipsis'})
        Property_Type = [Property_Type.text.strip() for Property_Type in Prop_Type]
        Agency_1=soup_2.find_all('div', attrs={'class' :'agencyName ellipsis'})
        Agency_Name=[Agency_Name.text.strip() for Agency_Name in Agency_1]
        Agent_1=soup_2.find_all('div', attrs={'class' :'agentName ellipsis'})
        Agent_Name=[Agent_Name.text.strip() for Agent_Name in Agent_1]
        raw_data = dict(A=np.array(Address),B=np.array(Property_Type),C=np.array(Agency_Name),D=np.array(Agent_Name))
        raw_df = pd.DataFrame(dict([ k,series(v) for k,v in raw_data.iteritems() ]))

我得到的错误是

File "<ipython-input-8-3a7c5fc4fb93>", line 32
    raw_df = pd.DataFrame(dict([ k,series(v) for k,v in raw_data.iteritems() ]))
                                               ^
SyntaxError: invalid syntax

我应该如何设置一个数据框,其中只有相关的值属于相关列,例如属性类型应该属于属性类型而不属于代理名称。

任何帮助都将受到高度赞赏, 谢谢!!!

1 个答案:

答案 0 :(得分:0)

series似乎无所作为 - 也许您的意思是将每个v变为带有pd.Series的大熊猫系列。此外,dict([...])内的语法似乎也很偏僻。如果你想创建key:value对,其中每个值都是一个Series,然后使用key:value对来创建一个DataFrame,你可以使用字典理解来完成它,如下所示:

raw_df = pd.DataFrame.from_dict({k:pd.Series(v) for k,v in raw_data.iteritems()})