美文网首页
scrapy-2.2spider 一页抓多页

scrapy-2.2spider 一页抓多页

作者: ddm2014 | 来源:发表于2018-06-17 20:29 被阅读0次

如果只是上次那么简单,就不用scrapy这么复杂的框架了,直接request就好了,scrapy更适合抓取一页是主页面(目录),根据目录里的连接抓取跳转之后的页面内容。比如在什么值得买中,这就是目录。


目录

这是其中一个子选项的跳转页面。


子项页面

主要思路是,先找到目录中各个子页面的href,然后写一个def来抓取每个子页面的需要信息。还是先上代码。

import scrapy
from pyquery import PyQuery as pq

class SmzdmCrawler(scrapy.Spider):
    name = 'smzdm'
    start_urls = ['https://faxian.smzdm.com/']

    def parse(self, response):
        res = pq(response.body)
        for item in res('.feed-block-ver').items():
            yield scrapy.Request(item('a').attr('href'),self.parse_detail)

    def parse_detail(self,response):
        res = pq(response.body)
        print(res('.article_title').text())

其中比较重要的是 这句
yield scrapy.Request(item('a').attr('href'),self.parse_detail)

yield跟return比较像,但是return是结束一个def,yield是一个生成器,每次循环迭代一个内容出来。
具体的理解yield
同时,return会结束函数,但是yield不会,所以一个def里可以有多个yield,比如yield item再yield Request再yield 另一个Request都可以。

还有一个小tips,对于每一级的 爬取都返回了item的情况,比如在索引页面也有item要抓取,在具体页面要抓取的情况,要用meta={'item':item}来传递数据。
不同级别的数据抓取集合

yield就每次生成一个请求,返回一个response,scrapy.Request第一个参数是子网页的网址,第二个参数是解析子网页的函数名称,只是名称不是调用,所以不用加()。
def parse_detail()
就按照常规的方法进行解析就好了。

相关文章

  • scrapy-2.2spider 一页抓多页

    如果只是上次那么简单,就不用scrapy这么复杂的框架了,直接request就好了,scrapy更适合抓取一页是主...

  • 多一页!

  • 日记

    如果你知道李清照,你便会知道,命运其实就是一本难以抓摸的书,前一页还是天堂,翻过一页就是地狱。 所以,不管你当下正...

  • 三月

    日历一页一页的撕下,仿佛,多撕一页,天气就暖和一点,绿也多一点。春自然也就多一些。渐渐地,到了三月……春天的雨是...

  • vim基础

    vim基础,多练习,多使用 按键操作 普通模式 1移动光标部分ctrl+f 向下一页ctrl+b 向上一页0 ...

  • 给自己(55)

    行走在路上 沿途的风景就像一本诗集 一页是春一页是夏 一页是秋一页是冬 一页是暖阳一页是风雪 一页是欢乐一页是痛苦...

  • 记最近做的Vue项目

    云文档 功能介绍: PDF,Office,图片 上传以及在线预览。 多页文件,可以评论某一页,并分享某一页到微信或...

  • 书香

    文|如烟似海 图|来自网络 指尖一页页地翻动着纸张,有一页轻盈,亦有一页沉重;有一页欢喜,亦有一页悲哀;有一页花香...

  • 实现ViewPager最后一页向后滑动监听

    本文旨在分享“ 如何准确实现ViewPager第一页向前和最后一页向后滑动监听 ”。 方法总比问题多! ...

  • 一页一页又一页

    阅读是写作的前置程序,舍弃阅读独尊写作是错误的选择。没有好的阅读就没有好的写作,这是真理。妄想跨过阅读直达写作无异...

网友评论

      本文标题:scrapy-2.2spider 一页抓多页

      本文链接:https://www.haomeiwen.com/subject/jxzweftx.html