Python Multi-threading 抓取,将数据写入csv文件
Python Multi-threading scraping, write data in csv file
我使用多处理池来提高抓取速度,一切正常,只是我不明白为什么 python 我的 csv header 每 30 行写一次,我知道有link 带有我输入的池参数,但如何纠正此行为
def parse(url):
dico = {i: '' for i in colonnes}
r = requests.get("https://change.org" + url, headers=headers, timeout=10)
# sleep(2)
if r.status_code == 200:
# I scrape my data here
...
pprint(dico)
writer.writerow(dico)
return dico
with open(lang + '/petitions_' + lang + '.csv', 'a') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames= colonnes)
writer.writeheader()
with Pool(30) as p:
p.map(parse, liens)
有人可以告诉把 'writer.writerow(dico)' 放在哪里以避免重复 header 吗?
谢谢
检查文件是否存在:
os.path.isfile('mydirectory/myfile.csv')
如果存在就不要再写header了。为 header 创建一个函数(def...),为数据创建另一个函数。
您指的 "header" 似乎来自 writer.writeheader()
行,而不是 writer.writerow()
行。
如果没有完整的代码片段,我只能假设您有类似外循环的东西环绕着 with open
块。因此,每次您的代码进入 with
块时,都会打印 header 行,然后是 30 行您抓取的数据(因为池大小)。
我使用多处理池来提高抓取速度,一切正常,只是我不明白为什么 python 我的 csv header 每 30 行写一次,我知道有link 带有我输入的池参数,但如何纠正此行为
def parse(url):
dico = {i: '' for i in colonnes}
r = requests.get("https://change.org" + url, headers=headers, timeout=10)
# sleep(2)
if r.status_code == 200:
# I scrape my data here
...
pprint(dico)
writer.writerow(dico)
return dico
with open(lang + '/petitions_' + lang + '.csv', 'a') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames= colonnes)
writer.writeheader()
with Pool(30) as p:
p.map(parse, liens)
有人可以告诉把 'writer.writerow(dico)' 放在哪里以避免重复 header 吗? 谢谢
检查文件是否存在:
os.path.isfile('mydirectory/myfile.csv')
如果存在就不要再写header了。为 header 创建一个函数(def...),为数据创建另一个函数。
您指的 "header" 似乎来自 writer.writeheader()
行,而不是 writer.writerow()
行。
如果没有完整的代码片段,我只能假设您有类似外循环的东西环绕着 with open
块。因此,每次您的代码进入 with
块时,都会打印 header 行,然后是 30 行您抓取的数据(因为池大小)。