<p>我终于解决了这个问题。感谢其他用户的帮助。解决方案不是合并CSV,而是将一些变量转移到新的变量中。我想我会把解决方案贴出来,以防以后别人发现它有用。在</p>
<p>CSV1,每个变量在单独的行中:</p>
<pre><code> url_1_00.html
url_1_01.html
url_1_02.html
</code></pre>
<p>(完整的CSV1包含约50个url)</p>
<p>每个URL都指向一个页面,其中包含一个(复杂的)所需信息列表,该列表有10-30个条目,其中一个条目是第二个URL。我需要把每个列表中的每一项从50个url中的每一个抓取到一个新的CSV中。在</p>
<p>Scrape1.py:<em>(注意:我已经将此代码设为通用代码;实际上scraper变量需要更多的导航和一些单击和下拉菜单,这就是为什么我要特别使用Selenium)。</em></p>
^{pr2}$
<p>这里有几个注意事项:
CSV1包含所有初始url,定义为url_1。在</p>
<p>这就产生了CSV2,它有我需要在其中抓取的下一组url。CSV2的行数超过800行(因此url_1的大约50个url产生了800多个url是url_2)</p>
<p>CSV2示例,每组变量位于不同的行中,变量以逗号分隔:</p>
<pre><code> 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
</code></pre>
<p>(完整的CSV2包含大约800行以上的可变url集)</p>
<p>现在我需要刮取每个url_2和另一个(复杂)变量列表。url_2页面上的每个列表包含30-100个带有~4个可变属性的项目,我需要将每个项目刮到自己的行中,同时添加变量属性,同时保留上一次刮取的信息(url_1,var_1,var_2…到url_2)。在</p>
<p>结果如下:</p>
<p>Scrape2.py:<em>(注意:我已经将此代码设为通用代码;这个部分不需要单击,所以我使用了beauthoulsoup)。</em></p>
<pre><code> ### HEADER: IMPORTS AND DEFINITIONS ###
import requests
from bs4 import BeautifulSoup
import time
import csv, codecs, cStringIO
raw_data_file = open("CSV2.csv", 'rU')
csv_data_file = csv.reader(raw_data_file, delimiter=',', quotechar='"')
csv_data_file.next()
###DEFINE FUNCTIONS HERE###
def scrapertron():
moarvarslist=soup.find_all('tr')
for each in moarvarslist:
var_a = None
try:
var_a = each.find('td', class_="classwhut")
except: pass
url_a = None
try:
url_a = each.find('a').get('href')
except: pass
var_b = None
try:
var_b = each.find('tr', class_="heyyyanotherone")
except: pass
url_b = None
try:
url_b = each.find('a').get('href')
except: pass
newsummary=[url_1, var_1, var_2, var_3, var_4, var_5, url_2, var_a, url_a, var_b, var_b]
# NOTICE as in the previous scrape, this carries over
# variables that aren't in the scrape from CSV2, namely
# url_1, var_1, var_2, var_3, var_4, var_5, and url_2
scrapeallvars.append(summary)
def write_to_csv():
with open('CSV3.csv', 'wb') as outfile:
writer = csv.writer(outfile)
writer.writerow(["url_1", "var_1", "var_2", "var_3", "var_4", "var_5", "url_2", "var_a", "url_a", "var_b", "var_b"])
# NOTICE again, the carry over variables from CSV2 here ^^^
writer.writerows(scrapeallvars)
###BEGIN ACTUAL PROGRAM###
scrapeallvars=[]
for each in csv_data_file:
url_1=each[0]
var_1=each[1]
var_2=each[2]
var_3=each[3]
var_4=each[4]
var_5=each[5]
url_2=each[6]
# The variables from CSV2 are actually defined here, after
# they are pulled using csv_data_file
response = requests.get(url_2)
soup = BeautifulSoup(response.content, "lxml")
scrapertron()
write_to_csv()
time.sleep(3)
print "ALL DONE!"
</code></pre>
<p>这将在最终文件CSV3中生成所有需要的变量。不再需要CSV4。所有url_2 url在列表中生成30-100个新变量项,这将在最终文件中生成120000多行。这个scrape需要更长的时间,因为它遍历了800多行url_2。对我来说,这大约花了一个小时,如果我没用的话时间。睡觉()它可能需要15-20分钟,但我不想压倒我正在抓取的网站。在</p>
<p>CSV3输出示例,每组变量位于不同的行中,变量以逗号分隔:</p>
<pre><code> 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
</code></pre>
<p>你知道这很长时间,但也许某个地方有人需要它!在</p>