python写了一个爬虫,内容储存到mongodb数据库,遇到一个错误不知怎么改,求大神帮忙
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python写了一个爬虫,内容储存到mongodb数据库,遇到一个错误不知怎么改,求大神帮忙相关的知识,希望对你有一定的参考价值。
爬虫爬的百度黄山吧,需要的内容都已经找到,但是存储过程出现错误。
value="tbname":tbname,
"id":id,
"name":name,
"date":date,
"img":img
posts.insert(value)
以下是错误代码
Traceback (most recent call last):
File "spider.py", line 89, in <module>
gettb(x)
File "spider.py", line 77, in gettb
gettb_back(purl,tbname)
File "spider.py", line 48, in gettb_back
posts.insert(value)
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.5.2-py2.7-linux-i686.egg/pymongo/collection.py", line 357, in insert
continue_on_error, self.__uuid_subtype), safe)
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.5.2-py2.7-linux-i686.egg/pymongo/message.py", line 79, in insert
encoded = [bson.BSON.encode(doc, check_keys, uuid_subtype) for doc in docs]
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.5.2-py2.7-linux-i686.egg/bson/__init__.py", line 567, in encode
return cls(_dict_to_bson(document, check_keys, uuid_subtype))
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.5.2-py2.7-linux-i686.egg/bson/__init__.py", line 476, in _dict_to_bson
elements.append(_element_to_bson(key, value, check_keys, uuid_subtype))
File "/usr/local/lib/python2.7/dist-packages/pymongo-2.5.2-py2.7-linux-i686.egg/bson/__init__.py", line 466, in _element_to_bson
type(value))
bson.errors.InvalidDocument: cannot convert value of type <class 'bs4.element.Tag'> to bson
能说的再细一点吗?我感觉我存储的都是字符串啊?是哪里出的问题啊?
追答你用type()看看你的tbname、id、name、date、img都是什么类型
参考技术A 难道是img的问题。mongodb是可以直接存的。这种写法没有问题。问题还是出在变量名与变量值上。
很简单就可以定位。你先将img换成一个字符串,如果成功了,就是img本身的格式问题。如果还不成可以试试将"id"换成"Identify"类似的这样的名子再式。2-3次试验就可以找到原因。追问
我把每一个变量都单独注释了,但是都有错误。
参考技术B 你可能很多变量都是bs4.element.Tag类型的。mangodb不能把它转成bson。你是不是用什么库parse html的返回的bs4.element.Tag类型的对象,不是字符串。
只要你的数据是可以转成json的就都可以存。 参考技术C 我写过一个爬虫是爬糗事百科的,然后存在sqlite里面。你也可以试试sqlite。
http://www.fiiii.com/qiushibaike_collector/追问
我们实验室的任务是用mongodb的,sqlite以前用,现在不用了。
python 爬虫加入线程池问题
我写了个python爬虫,因为考虑到效率的问题,想加入线程池,就是将抓取到的100个URL加入到队列里,然后开启10个线程去队列里取URL同时处理URL对应的内容,应该怎么实现呢!大神求救啊!
就是我的爬虫是单线程的~怎么实现多线程想把第一步爬取的URL加入到队列后,创建多个线程去处理相关页面的抓取~
不会写了
大致思路就是下面了,如果这都看不懂,转行吧。
import threadingimport Queue
class MyThread(threaing.Thread):
def __init__(self, queue, name=None):
self._queue = queue
if name:
self.name = name
pass
def run(self):
while q.empty():
pass
queue = Queue()
for i in xrange(100):
queuq.put(i)
threads = []
for i in xrange(10):
threads.append(MyThread(queue, str(i)))
for i in threads:
i.start()
以上是关于python写了一个爬虫,内容储存到mongodb数据库,遇到一个错误不知怎么改,求大神帮忙的主要内容,如果未能解决你的问题,请参考以下文章