如何在Python中以正确的顺序将抓取的数据写入数据帧

时间:2019-10-16 11:41:30

标签: python selenium dataframe web-scraping

我有以下python程序,该程序通过网站抓取以获得名称,公司名称和地址。这很好。然后,我试图将抓取的数据写入数据帧。我要他们按正确的顺序。有时网站没有公司名称,而只有名称和地址,如果公司名称不存在,我是否可以通过任何方式指定它采用默认值?因为当我尝试将其写入数据帧时会出现以下错误:

“ ValueError:值的长度与索引的长度不匹配”。

因为没有为每个成员提供公司名称。

memeberName = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, '.member-name')))
company = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, '.company-name')))
address = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, '.list-address-panel')))

mb = []
comp = []
add = []

df = pd.DataFrame(columns = ['MemberName', 'Company', 'Address'])

for getname in memeberName:
        print("Name:" + getname.text) #returns 20 results
        mb.append(getname.text)

for getcompany in company:
        print("CompanyName:" + getcompany.text) #returns 18 results
        comp.append(getcompany.text)

for getaddress in address:
        print("Address:" + getaddress.text) #returns 20 results
        add.append(getaddress.text)

df["MemberName"] = mb
df["Address"] = add
df["Company"] = comp

print(df)

我需要抓取的数据位于div标记内,并且不在表中。因此,我试图找到一种方法以正确的顺序抓取细节。我需要每个人的姓名,公司和地址。如果缺少公司,我需要空白,NAN或null,则不应使用其他名称的公司。

Elements

1 个答案:

答案 0 :(得分:0)

下面(使用itertools.zip_longest)

import itertools
import pandas as pd

mb = ['A','B','C']
comp = ['Z','X']
add = [12]


values = list(itertools.zip_longest(mb, comp, add))
df = pd.DataFrame(values)
print(df)  

输出

0  A     Z  12.0
1  B     X   NaN
2  C  None   NaN