python 抓取数据到csv

dsekswqp  于 2023-02-21  发布在  Python
关注(0)|答案(1)|浏览(85)

我从一个网站上抓取了一些数据--多个页面的多个链接--当我运行代码时,它输出了我正在寻找的所有信息。问题是我很难将它转换为 Dataframe 并将其移动到CSV文件。我认为问题是我需要将我的dict转换为列表,但我不确定这一点。我不确定下一步该怎么做,因为我对Python还比较陌生。

from requests_html import HTMLSession

s = HTMLSession()
def get_product_links(page):
  url = f'https://lakesshoweringspaces.com/catalogue-product-filter/page/{page}'
  links = []
  r = s.get(url)

  products = r.html.find("article.contentwrapper section.collection-wrapper-item")

  for item in products:
    links.append(item.find("a", first=True).attrs['href'].replace('?', ''))
  return links

#page1 = get_product_links(1)
#print(page1)

def parse_product(url):

  r = s.get(url)
  product_type = r.html.find('div.product-sidecontent h3', first=True).text.strip()
  collection = r.html.find('div.product-sidecontent h1', first=True).text.strip()
  description = r.html.find('div.information_grey_section h3.table-title', first=True).text.strip()
  detail = r.html.find('table', first=True)
  tabledata = [[c.text for c in row.find('td')] for row in detail.find('tr')][1:]
  tableheader = [[c.text for c in row.find('th')] for row in detail.find('tr')][0]
  table = [dict(zip(tableheader,t)) for t in tabledata]

  product ={
      'Product Type' : product_type,
      'Collection' : collection,
      'Short Description' : description,
      'Product Data' : table,
  }
  return product

results = []
for x in range(1, 10):
  print('Getting Page ', x)
  urls = get_product_links(x)
  for url in urls:
    print(parse_product(url))
    results.append(parse_product(url))
  print('Total Results: ', len(results))

任何帮助/指导都将不胜感激。

odopli94

odopli941#

问题是dict列表大小不一致。
但是,下面的代码应该可以实现这个目的

for DICT1 in results:
    all_datax=[]
    for key, value in DICT1.items():
        if isinstance(value, list):
            for idx,(inner_key, inner_value) in enumerate(value[0].items()):
                all_datax.append({f"Product Data {inner_key}_{idx}": inner_value})
        else:
            all_datax.append({key: value})
    all_data.append(dict(pair for d in all_datax for pair in d.items()))
df = pd.DataFrame(all_data)
df.to_excel('lakes.xlsx', index=False)

该代码迭代字典列表(结果),并将数据转换为PandasDataFrame,然后将其保存到Excel文件。

相关问题