【发布时间】:2015-01-22 00:45:30
【问题描述】:
我只是在 Python 中进行编码和编码。目前我正在开发一个网络爬虫。 我需要将数据保存到 JSON 文件中,以便将其导出到 MongoDB。
import requests
import json
from bs4 import BeautifulSoup
url= ["http://www.alternate.nl/html/product/listing.html?filter_5=&filter_4=&filter_3=&filter_2=&filter_1=&size=500&lk=9435&tk=7&navId=11626#listingResult"]
amd = requests.get(url[0])
soupamd = BeautifulSoup(amd.content)
prodname = []
adinfo = []
formfactor = []
socket = []
grafisch = []
prijs = []
a_data = soupamd.find_all("div", {"class": "listRow"})
for item in a_data:
try:
prodname.insert(len(prodname),item.find_all("span", {"class": "name"})[0].text)
adinfo.insert(len(adinfo), item.find_all("span", {"class": "additional"})[0].text)
formfactor.insert(len(formfactor), item.find_all("span", {"class": "info"})[0].text)
grafisch.insert(len(grafisch), item.find_all("span", {"class": "info"})[1].text)
socket.insert(len(socket), item.find_all("span", {"class": "info"})[2].text)
prijs.insert(len(prijs), item.find_all("span", {"class": "price right right10"})[0].text)
except:
pass
我被困在这部分。我想将保存在数组中的数据导出到 JSON 文件。这就是我现在拥有的:
file = open("mobos.json", "w")
for i = 0:
try:
output = {"productnaam": [prodname[i]],
"info" : [adinfo[i]],
"formfactor" : [formfactor[i]],
"grafisch" : [grafisch[i]],
"socket" : [socket[i]],
"prijs" : [prijs[i]]}
i + 1
json.dump(output, file)
if i == 500:
break
except:
pass
file.close()
所以我想创建一个这样的字典格式:
{"productname" : [prodname[0]], "info" : [adinfo[0]], "formfactor" : [formfactor[0]] .......}
{"productname" : [prodname[1]], "info" : [adinfo[1]], "formfactor" : [formfactor[1]] .......}
{"productname" : [prodname[2]], "info" : [adinfo[2]], "formfactor" : [formfactor[2]] .......} etc.
【问题讨论】:
-
您可能想再次阅读有关循环和列表的 Python 教程。不要使用
listobject.insert(len(listobject), ...),例如使用listobject.append(..),为什么不将所有信息添加到一个列表(例如字典),然后只循环一个列表?可以使用for item in listobject:,不需要索引。 -
而你真的不想在没有特定例外的情况下使用
try...except;不要那样掩盖你的错误。
标签: python json mongodb beautifulsoup web-crawler