Selepas perangkak menjana dict, saya ingin menulisnya ke dalam fail csv, tetapi ralat berlaku
Gunakan jupyter notebook dan persekitaran tetingkap.
Kod khusus adalah seperti berikut
import requests
from multiprocessing.dummy import Pool as ThreadPool
from lxml import etree
import sys
import time
import random
import csv
def spider(url):
header={
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
timeout=random.choice(range(31,50))
html = requests.get(url,header,timeout=timeout)
time.sleep(random.choice(range(8,16)))
selector = etree.HTML(html.text)
content_field = selector.xpath('//*[@class="inner"]/p[3]/p[2]/ul/li')
item ={}
for each in content_field:
g = each.xpath('a/p[1]/p[1]/h3/span/text()')
go = each.xpath('a/p[1]/p[2]/p/h3/text()')
h = each.xpath('a/p[1]/p[2]/p/p/text()[1]')
j= each.xpath('a/p[1]/p[1]/p/text()[2]')
ge = each.xpath('a/p[1]/p[2]/p/p/text()[3]')
x = each.xpath('a/p[1]/p[1]/p/text()[3]')
city = each.xpath('a/p[1]/p[1]/p/text()[1]')
gg = each.xpath('a/p[2]/span/text()')
item['city']="".join(city)
item['hangye']="".join(hangye)
item['guimo']="".join(guimo)
item['gongsi']="".join(gongsi)
item['gongzi']="".join(gongzi)
item['jingyan']="".join(jingyan)
item['xueli']="".join(xueli)
item['gongzuoneirong']="".join(gongzuoneirong)
fieldnames =['city','hangye','guimo','gongsi','gongzi','jingyan','xueli','gongzuoneirong']
with open('bj.csv','a',newline='',errors='ignore')as f:
f_csv=csv.DictWriter(f,fieldnames=fieldnames)
f_csv.writeheader()
f_csv.writerow(item)
if __name__ == '__main__':
pool = ThreadPool(4)
f=open('bj.csv','w')
page = []
for i in range(1,100):
newpage = 'https://www.zhipin.com/c101010100/h_101010100/?query=%E6%95%B0%E6%8D%AE%E8%BF%90%E8%90%A5&page='+str(i) + '&ka=page-' + str(i)
page.append(newpage)
results = pool.map(spider,page)
pool.close()
pool.join()
f.close()
Jalankan kod di atas dan mesej ralat ialah
ValueError: terlalu banyak nilai untuk dibongkar (dijangka 2)
Sebab pertanyaan ialah untuk melintasi dict, bentuk dict.items() diperlukan. Tetapi bagaimana untuk melaksanakannya dalam kod di atas belum diluruskan. Sila beri saya nasihat
Maaf, saya hanya mempunyai masa untuk menjawab soalan anda sekarang. Saya melihat bahawa anda telah menukar kod mengikut cadangan saya
Perkara utama di sini ialahheader, anda adalah type
Saya masih memerlukan nasihat untuk anda di siniset
类型,我修改后是dict
Saya tidak mendapat ralat apabila saya menulis seperti ini
Writerrow hanya menerima dict secara terus Saya rasa masalah anda adalah kerana kunci item tidak sepadan dengan pengepala jadual anda
Kerana beberapa nama lajur yang dinyatakan dalam medan tidak wujud dalam item