python爬虫进阶—pyspider框架——2

上一篇讲怎么入门,这篇就介绍三个函数on_start,index_page,detail_page(自己的理解)
这里写图片描述
on_start是入口,_ _ START_URL____ 那里填入你要爬的网页的url,
对于crawl方法可以看文档
不过我觉得文档里面callback这个讲的不是很清楚,我讲下我的理解,callback是说你这个crawl到的页面用那个函数来解析
index_page这个函数初始的作用是把on_start中的页面上所有的url再爬一遍
detail_page这个函数初始状态的作用就是返回页面的url和title,在这个类里,所以的返回会添加到结果队列里,最后保存在结果里。
顺带说下response类,一般都只会用到response.doc这个类和response.text这个类,response.doc是将爬取的html加载成pyquery类。看教程http://www.pyspider.cn/jiaocheng/pyspider-pyquery-14.html
一般都常用到.text()和.html()这个两方法。
再者对于.doc(”)要写什么,可以看pyquery的文档,不过方便UI界面中css选择器已经帮我们搞定了
这里写图片描述
左下角的那个enable css可以直接在旁边web里直接选取元素,再也不用去研究html源码了,同时上面那个div那里方框可以提供不同css选法(总有一款适合你)还有更方便的,那个箭头号会直接把css选择表达式写到光标出所以直接光标放到.doc(”)里面直接就可以爬出那些红框框选中的部分。(这是我觉得这个框架超人性化的设计,在此默默感谢作者)
后面说下send_message(project_name,message,url)
有人说有时候一个页面要爬多个地方,而且没必要用index_page这个时候就需要用到send_message。
三个参数,一般projec_name=self.project_name,message={“title”: ……(你需要的爬取的东西)},url是用来去重的相当于每次返回的结果的名称,名称相同就会被覆盖。
on_message()这个函数与send_message对应用来接收消息的,例如

def index_page(self, response):
        for each in response.doc('article.l-article').items():
            self.i=self.i+1
            q=pq(each.html())
            self.send_message(self.project_name,{"title":q('.title').find('a').text(),
                                                 'mileage':q('.val').eq(1).text(),
                                                 'color':q('.val').eq(3).text(),
                                                 'engine':q('.val').eq(4).text(),
                                                 'mpg':q('.val').eq(5).text(),
                                                 'location':q('.val').eq(6).text(),
                                                 "price":q('.r-title-price').text()

                                                },url=q('.title').find('a').text()+q('.val').eq(1).text()+q('.r-title-price').text()+q('.val').eq(3).text())
    @config(priority=2)
    def on_message(self, project,msg):
        return msg

msg就是那个字典,返回后添加到结果队列。
下篇文字章
python爬虫进阶—pyspider框架——3(实战)

猜你喜欢

转载自blog.csdn.net/lingxian55/article/details/79226803