具有不等长度数组的web数据python3

2024-04-25 17:30:14 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的代码刮一个网站。我必须创建一个具有不等长度数组的数据帧,例如property\u Type具有可变长度,soe列表具有一个property\u类型,有些具有两个,有些具有三个。同样,机构名称也有不同的长度。你知道吗

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

我应该怎么做才能有一个只有相关值落在相关列下的数据框,比如属性类型应该在属性类型中,而不是落在代理名称中。你知道吗

任何帮助都将不胜感激, 谢谢!!!你知道吗


Tags: nameinimportforrawaddresstypenp
1条回答
网友
1楼 · 发布于 2024-04-25 17:30:14

series似乎什么也没做也许你的意思是把每个v变成一个带有pd.Series的熊猫系列。而且,dict([...])中的语法似乎有点离谱。如果你想创造键:值对其中每个值都是一个系列,然后使用键:值对要创建数据帧,可以通过字典理解来完成,如下所示:

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

相关问题 更多 >