【问题标题】:How to write scraped data to a data frame in the correct order in Python如何在 Python 中以正确的顺序将抓取的数据写入数据帧
【发布时间】:2019-10-16 11:41:30
【问题描述】:

我有以下 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 它不应该使用不同名称的公司。

【问题讨论】:

  • 所以问题不在于顺序,是有一个空字符串来保持位置吗?修改提取数据的方式是解决方案,如果数据存在于表中,则迭代 trs
  • 好吧,您可以检查...如果公司名称未定义/为空,则相应地在变量中传递默认值。
  • @Wonka 请看我的编辑。数据在 div 标签中
  • @Sindu_ 然后迭代主 div
  • @Wonka 会给我所有的细节。但我无法确定姓名、公司名称和地址是哪一个。

标签: python selenium dataframe web-scraping


【解决方案1】:

以下(使用 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

【讨论】:

  • 试过了,但顺序不对
  • 这是一个不好的答案,如果“A”没有值并且应该有 NaN/None 值会发生什么,你的答案只是为持续项目分配值
猜你喜欢
  • 2021-09-12
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
相关资源
最近更新 更多