将URL和嵌套CSV与python结合时出现问题

将URL和嵌套CSV与python结合时出现问题,python,csv,pandas,selenium,beautifulsoup,Python,Csv,Pandas,Selenium,Beautifulsoup,我的项目要求我分几个步骤从网站上获取信息,每个步骤都会添加新的页面和变量,以便在接下来的步骤中获取信息。我正在使用Python来实现这一点……仅在3个月前,我就学习了非常基本的方面,在这方面还是非常新的 刮削的顺序如下: 步骤0: CSV1文件的顶级类别的网址刮(url_1),约20个网址总数 --> 步骤1: 以scrape1.py为例,它使用Selenium Firefox Webdriver加载CSV1中的每个(url_1)链接,使CSV2在列中包含以下中间类别变量:(variable1)

我的项目要求我分几个步骤从网站上获取信息,每个步骤都会添加新的页面和变量,以便在接下来的步骤中获取信息。我正在使用Python来实现这一点……仅在3个月前,我就学习了非常基本的方面,在这方面还是非常新的

刮削的顺序如下:

步骤0: CSV1文件的顶级类别的网址刮(url_1),约20个网址总数

-->

步骤1: 以scrape1.py为例,它使用Selenium Firefox Webdriver加载CSV1中的每个(url_1)链接,使CSV2在列中包含以下中间类别变量:(variable1)、(variable2)、(variable3)、(variable4)、(variable5)、(url_2)…。每次加载(url_1)都会产生12-24个具有唯一(url_2)链接的新行,因此总共大约有400多行

-->

步骤2: 使用scrape2.py和Beauty Soup加载CSV2中的每个(url_2)链接,并使CSV3在列中包含以下最终类别变量:(变量_A)、(变量_A)、(url_A)、(变量_B)、(变量_B)、(url_B)。每个(url_2)链接产生20+个变量(A、A、B、B)和url(A、B、B),因此输出将远远超过10000行(目前只有在只有5行url_2的较小版本的CSV2上运行此功能)

-->

步骤3:

将所有变量合并到一个CSV4文件中

我遇到的问题在步骤3中。我能够创建CSV1、CSV2和(被截断的)CSV3。我能够创建scrape1.py和scrape2.py并成功地收集变量和URL。但我不知道如何将所有变量放入一个CSV文件中。特别是因为每个阶段都会以指数方式增加后续变量的数量,因此CSV1中的一行(url_1)将在CSV3中产生200-400+行变量。我需要将变量从一个CSV文件“结转”到下一个CSV文件,但新文件中的结转变量必须在每一行的新迭代中多次出现,而不是一次,因此仅将它们作为新列添加是行不通的

最终输出应为:

CSV1:(url_1)[x20]

CSV2:对于每个(url_1),大约22行: (变量1),(变量2),(变量3),(变量4),(变量5),(url_2)

CSV3:对于每个(url_2),大约30行: (变量_A)、(变量_A)、(url_A)、(变量_B)、(变量_B)、(url_B)、(url_B)

CSV4:CSV3中的每一行都使用以前的变量复制,因此每一行都有: (url_1)、(variable1)、(variable2)、(variable3)、(variable4)、(variable5)、(url_2)、(variableA)、(variableA)、(variableA)、(variableB)、(variableB)、(url_B)

有人建议我试试熊猫,但我无法用我读到的其他人的项目来解决这个问题


任何帮助都将不胜感激

带有列的CSV:

  • CSV1
    • url\u 1
  • CSV2
    • url\u 1
    • 变量1
    • url_2
  • CSV3
    • url_2
    • 变量_A
如果您想合并这些CSV,只需使用

pandas.merge(CSV1,CSV2)将使用CSV1和CSV2的公共列(在示例中,列url_1)连接CSV1和CSV2


看看这个例子。

我终于解决了这个问题。感谢其他用户的帮助。解决方案不是合并CSV,而是将一些变量带入新变量。我想我会发布解决方案,以防以后有人发现它有用

CSV1,每个变量在单独的行中:

    url_1_00.html
    url_1_01.html
    url_1_02.html
(完整的CSV1包含约50个URL)

每个URL指向一个包含所需信息(复杂)列表的页面,该列表有10-30个项目,其中一个项目是第二个URL。我需要从50个URL中的每一个,将每个列表中的每一项刮到一个新的CSV中

Sprape1.py:(注意:我已经将此代码设置为通用代码;实际上,scraper变量需要更多的导航和一些单击和下拉菜单,这就是我特别使用Selenium的原因)

这里有几个注意事项: CSV1包含所有初始url,定义为url_1

这就产生了CSV2,它有我需要在其中刮取的下一组URL。CSV2的行数超过800行(因此,作为url_1的~50个url产生了800多个作为url_2的url)

CSV2示例,每组变量位于不同的行中,变量以逗号分隔:

    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00.html  
    url_1_00, var_1_01, var_2_01, var_3_01, var_4_01, var_5_01, url_2_01.html  
    url_1_00, var_1_02, var_2_02, var_3_02, var_4_02, var_5_02, url_2_02.html  
    url_1_00, var_1_03, var_2_03, var_3_03, var_4_03, var_5_03, url_2_03.html  
    url_1_00, var_1_04, var_2_04, var_3_04, var_4_04, var_5_04, url_2_04.html
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_000, url_a_000, var_b_000, url_b_000  
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_001, url_a_001, var_b_001, url_b_001  
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_002, url_a_002, var_b_002, url_b_002  
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_003, url_a_003, var_b_003, url_b_003
(完整的CSV2包含约800行上述可变url集)

现在我需要抓取每个url_2,并获取另一个(复杂)变量列表。url_2页面上的每个列表包含30-100个具有4个可变属性的项目,我需要将每个项目刮到自己的行中,并添加其可变属性,同时保留以前刮取的信息(url_1、var_1、var_2…通过url_2)

结果如下:

Scrape2.py:(注意:我将此代码设置为通用代码;此部分不需要单击,因此我使用了BeautifulSoup)

这将在最终文件CSV3中生成所需的所有变量。不再需要CSV4。所有url_2 url在列表中产生30-100个新的变量项,从而在最终文件中产生120000多行。这种刮取需要更长的时间,因为它要遍历800多行url_2。对我来说,这大约需要一个小时,但如果我没有使用time.sleep()的话,这可能需要15-20分钟,但我不想淹没我正在浏览的网站

CSV3输出示例,每组变量位于不同的行中,变量以逗号分隔:

    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00.html  
    url_1_00, var_1_01, var_2_01, var_3_01, var_4_01, var_5_01, url_2_01.html  
    url_1_00, var_1_02, var_2_02, var_3_02, var_4_02, var_5_02, url_2_02.html  
    url_1_00, var_1_03, var_2_03, var_3_03, var_4_03, var_5_03, url_2_03.html  
    url_1_00, var_1_04, var_2_04, var_3_04, var_4_04, var_5_04, url_2_04.html
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_000, url_a_000, var_b_000, url_b_000  
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_001, url_a_001, var_b_001, url_b_001  
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_002, url_a_002, var_b_002, url_b_002  
    url_1_00, var_1_00, var_2_00, var_3_00, var_4_00, var_5_00, url_2_00, var_a_003, url_a_003, var_b_003, url_b_003

知道这很长,但也许某个地方有人需要它

欢迎来到堆栈溢出!您可以先学习并创建一个示例。这使我们能够更容易地帮助您。@Stephernauch感谢您的回复…我在发布之前阅读了这两个参考资料,并试图按照这些指导原则构思我的问题。你的评论表明我的工作没有我希望的那么好,所以我编辑了一些c