我的项目要求我从一个网站上抓取信息分几个步骤,每一步都添加新的页面和变量,以便在接下来的步骤中获取。我用Python来做这个…仅仅在3个月前就学会了非常基本的方面,仍然是非常新的。在
刮削顺序如下:
第0步: CSV1文件的顶级类别网址刮(url_1),约20个网址总数
——>
第一步: 以scrape1.py为例,它使用Selenium Firefox Webdriver加载CSV1中的每个(url_1)链接,使CSV2在列中包含以下中间类变量:(variable1),(variable2),(variable3),(variable4),(variable5),(url_2)…每次加载(url_1)将产生12-24个新行,其中包含一个惟一的(url_2)链接,因此总共大约有400多行
——>
第二步: 使用scrape2.py和Beautiful Soup加载CSV2中的每个(url_2)链接,并使CSV3在列中包含以下结束类别变量:(variable_A)、(variable_A)、(url_A)、(variable_B)、(variable_B)、(url_B)、(url_B)。每个(url_2)链接产生每个变量(A,A,B,B)和url(A,B,B)的20+个,因此输出将远远超过10000行(目前只在CSV2的较小版本上运行,它只有5行url_2)
——>
第三步:
将所有变量合并到一个CSV4文件中。在
我遇到的问题是在第三步。我能够创建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行都复制了以下变量: (url_1),(变量1),(变量2),(变量3),(变量4),(变量5),(url_2),(变量_A),(变量_A),(url_A),(变量_B),(变量_B),(url_B),(url_B)
有人建议我试试熊猫,但我不知道如何利用别人的项目来实现这一点。在
如有任何帮助,将不胜感激!在
我终于解决了这个问题。感谢其他用户的帮助。解决方案不是合并CSV,而是将一些变量转移到新的变量中。我想我会把解决方案贴出来,以防以后别人发现它有用。在
CSV1,每个变量在单独的行中:
(完整的CSV1包含约50个url)
每个URL都指向一个页面,其中包含一个(复杂的)所需信息列表,该列表有10-30个条目,其中一个条目是第二个URL。我需要把每个列表中的每一项从50个url中的每一个抓取到一个新的CSV中。在
Scrape1.py:(注意:我已经将此代码设为通用代码;实际上scraper变量需要更多的导航和一些单击和下拉菜单,这就是为什么我要特别使用Selenium)。
^{pr2}$这里有几个注意事项: CSV1包含所有初始url,定义为url_1。在
这就产生了CSV2,它有我需要在其中抓取的下一组url。CSV2的行数超过800行(因此url_1的大约50个url产生了800多个url是url_2)
CSV2示例,每组变量位于不同的行中,变量以逗号分隔:
(完整的CSV2包含大约800行以上的可变url集)
现在我需要刮取每个url_2和另一个(复杂)变量列表。url_2页面上的每个列表包含30-100个带有~4个可变属性的项目,我需要将每个项目刮到自己的行中,同时添加变量属性,同时保留上一次刮取的信息(url_1,var_1,var_2…到url_2)。在
结果如下:
Scrape2.py:(注意:我已经将此代码设为通用代码;这个部分不需要单击,所以我使用了beauthoulsoup)。
这将在最终文件CSV3中生成所有需要的变量。不再需要CSV4。所有url_2 url在列表中生成30-100个新变量项,这将在最终文件中生成120000多行。这个scrape需要更长的时间,因为它遍历了800多行url_2。对我来说,这大约花了一个小时,如果我没用的话时间。睡觉()它可能需要15-20分钟,但我不想压倒我正在抓取的网站。在
CSV3输出示例,每组变量位于不同的行中,变量以逗号分隔:
你知道这很长时间,但也许某个地方有人需要它!在
对于带列的CSV:
如果要合并这些csv,只需使用pandas.merge。在
熊猫。合并(CSV1,CSV2)将使用它们的公共列连接CSV1和CSV2(在示例中,columnurl_1)。在
看看这个例子here。在
相关问题 更多 >
编程相关推荐