嗨,到目前为止,我已经研究了这个网络抓取示例教程达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文件中。
答案 0 :(得分:0)
对代码进行一些调整,item_title
,item_desc
,item_price
和item_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
一旦声明了列,您要做的就是为它们提供值,这些值在迭代过程中获得的列表中。
希望这会有所帮助:))。