本文介绍了从.csv中读取URL并将抓取结果添加到前面使用的Python、BeautifulSoup、Pandas的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我让这段代码几乎正常工作,尽管我对此一无所知。请帮我打出本垒打!

  • 问题1:输入:
我有一个很长的URL列表(1000+)可供读取,它们位于.csv中的单个列中。我更愿意读取该文件,而不是将它们粘贴到代码中,如下所示。

  • 问题2:输出:

源文件实际上有3个驱动程序和3个挑战。在一个单独的python文件中,下面的代码查找、打印并保存所有3个文件,但在我使用下面的数据帧时不会(见下文-它只保存2个)。

  • 问题3:输出:
我希望输出(两个文件)在第0列中有URL,然后在以下列中有驱动程序(或挑战)。但我在这里写的(可能是"Drop")使它们不仅删除一行,而且还跨两列移动。

在最后,我同时显示了输入和当前所需的输出。很抱歉问了这么长的问题。如有任何帮助,我将非常感激!

import requests
from bs4 import BeautifulSoup
import pandas as pd

urls = ['https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Induction-Hobs-30196623/', 'https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Human-Capital-Management-30196628/', 'https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-Probe-Card-30196643/']
dataframes = []
dataframes2 = []

for url in urls:
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    toc = soup.find("div", id="toc")

    def get_drivers():
        data = []
        for x in toc.select('li:-soup-contains-own("Market drivers") li'):
            data.append(x.get_text(strip=True))
        df = pd.DataFrame(data, columns=[url])
        dataframes.append(pd.DataFrame(df).drop(0, axis=0))
        df2 = pd.concat(dataframes)
        tdata = df2.T
        tdata.to_csv(f'detail-dr.csv', header=True)

    get_drivers()


    def get_challenges():
        data = []
        for y in toc.select('li:-soup-contains-own("Market challenges") li'):
            data.append(y.get_text(strip=True).replace('Table Impact of drivers and challenges', ''))
        df = pd.DataFrame(data, columns=[url])
        dataframes2.append(pd.DataFrame(df).drop(0, axis=0))
        df2 = pd.concat(dataframes2)
        tdata = df2.T
        tdata.to_csv(f'detail-ch.csv', header=True)

    get_challenges()
每个URL中的输入如下所示。它们只是列表:

市场驱动因素

  • 不断增加对FABS的投资
  • 电子产品小型化
  • 不断增长的物联网设备需求

市场挑战

  • 半导体行业的快速技术变革
  • 半导体行业的波动性
  • 技术鸿沟的影响驱动因素和挑战的影响

我希望驱动程序的输出是:

http/.../Global-Induction-Hobs-30196623/产品创新和新设计随着生活方式的改变,人们对方便的家用电器的需求不断增加节能家电的应用日益增多
http/.../Global-Human-Capital-Management-30196628/自动化招聘流程需求对所有人力资源职能的统一解决方案的需求不断增加增加劳动力多样性
http/.../Global-Probe-Card-30196643/增加对FABS的投资电子产品小型化不断增长的物联网设备需求

但我得到的却是:

http/.../Global-Induction-Hobs-30196623/随着生活方式的改变,人们对方便的家用电器的需求不断增加节能家电的应用日益增多
http/.../Global-Human-Capital-Management-30196628/对所有人力资源职能的统一解决方案的需求不断增加增加劳动力多样性
http/.../Global-Probe-Card-30196643/电子产品小型化不断增长的物联网设备需求

推荐答案

将数据存储在字典列表中,并从中创建数据框。将drivers/challenges的列表拆分为单个columns并将其连接到最终数据帧。

这篇关于从.csv中读取URL并将抓取结果添加到前面使用的Python、BeautifulSoup、Pandas的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 03:16