从.csv中读取URL并将抓取结果添加到前面使用的Python、BeautifulSoup、Pandas

Reading URLs from .csv and appending scrape results below previous with Python, BeautifulSoup, Pandas(从.csv中读取URL并将抓取结果添加到前面使用的Python、BeautifulSoup、Pandas)
本文介绍了从.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的投资
  • 电子产品小型化
  • 不断增长的物联网设备需求

市场挑战

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

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

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

但我得到的却是:

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

推荐答案

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

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

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)