PySpider Handler中是否允许用户自定义函数?
PySpider新手,想在爬取内容的过程中把网页整个存下来,不知道有没有现成可用的方法,于是加了一个函数write_file,结果运行说“name 'write_file' is not defined”,这是什么问题呢?大牛们怎么保存网页和网页中的文件的?代码如下:
from pyspider.libs.base_handler import *
import os
from urllib.parse import urlparse
class Handler(BaseHandler):
crawl_config = {
}
def write_file(response):
url=response.url
host,path=urlparse(url)[1:3]
path2=path[0:path.rindex('/')+1]
base='pyspider/'
path3=base+host+path2
os.makedirs(path3)
file=open(base+host+path,'wb')
file.write(response.content)
file.flush()
file.close()
@every(minutes=10)
def on_start(self):
self.crawl('http://www.aaa.com', callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items():
self.crawl(each.attr.href, callback=self.detail_page)
@config(priority=2)
def detail_page(self, response):
write_file(response)
return {
"url": response.url,
"title": response.doc('title').text(),
"content":response.doc('html').text()
#"content":response.doc('html').text()
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
self.write_file
哦,对了,还有你函数声明要变成
def write_file(self, response)
仍然不知道错在哪里,但找到了等效的办法。
参考了大牛写的例子,额外定义一个类,把写文件的函数写在这个类里。
from pyspider.libs.base_handler import *
import os
from urllib.parse import urlparse
def write_file(response):
class Handler(BaseHandler):
import os
from urllib.parse import urlparse
class Handler(BaseHandler):
在类里面可以自定义变量或者函数,不过需要用 self.xxx 来访问或者调用