提取了数据但无法打印表格

时间:2019-07-03 00:04:34

标签: python python-3.x pandas

嗨,到目前为止,我已经研究了这个网络抓取示例教程达5天。我对结果感到满意,到目前为止,我已经能够克服这些问题,并且我得到了抓取数据,循环工作并且可以将其拉入控制台。问题在于将这些数据导入大熊猫或任何类型的导出类型。

我一直在尝试用熊猫创建表,但是没有输出,当我导出到excel时,我在excel文件中只得到一行

from bs4 import BeautifulSoup

import requests
import pandas as pd
import numpy as np
import re
from openpyxl.workbook import Workbook

source = requests.get('https://www.ebay.com/b/Cell-Phone-Smartphone-Parts/43304/bn_151926?rt=nc&_pgn=1').text

soup = BeautifulSoup(source, 'lxml')

items = soup.find('li', class_='s-item')



for items in soup.find_all('li', class_='s-item'):


    try:
        item_title = items.find('h3', class_='s-item__title').text
    except Exception as e:
        item_title = 'None'

    print(item_title)

    try:
        item_price = items.find('span', class_='s-item__price').text
    except Exception as e:
        item_price = 'None'

    print(item_price)

    try:
        item_desc = items.find('div', class_='s-item__summary').text
    except Exception as e:
        item_desc = 'None'

    print(item_desc)

    try:
        item_brand = items.find('span', class_='s-item__dynamic s-item__dynamicAttributes2').text
    except Exception as e:
        item_brand = 'None'

    print(item_brand)

    try:
        item_link = items.find('a', class_='s-item__link')['href']
    except Exception as e:
        item_link = 'None'

    print(item_link)

# I also dont know if the pandas code should be indented inside the loop or #outside of it btw, below is the panda table i been trying to create.

df = pd.DataFrame(columns = ['Title', 'description', 'Price', 'Link'])

    df.loc[n, 'Title'] = item_title
    df.loc[n, 'description'] = item_desc
    df.loc[n, 'Price'] = item_price
    df.loc[n, 'Link'] = item_link    

    n+=1

df.head()
#nothing happens here =(

所以我从站点获取了数据,循环正在工作,但我无法将其提取到表或Excel文件中。

1 个答案:

答案 0 :(得分:0)

对代码进行一些调整,item_titleitem_descitem_priceitem_link应该是列表。因此,每次使用items.find获取值时,都必须将其附加到其各自的列表中,而不是将其存储在这样命名的变量中。

第二,您不必迭代列名或使用loc。代码的最后一部分应如下所示:

df = pd.DataFrame(columns = ['Title', 'description', 'Price', 'Link'])

df['Title'] = item_title
df['description'] = item_desc
df['Price'] = item_price
df['Link'] = item_link

一旦声明了列,您要做的就是为它们提供值,这些值在迭代过程中获得的列表中。

希望这会有所帮助:))。