Geophysic_CSU 2019-10-26 20:31 采纳率: 50%
浏览 863

Scrapy多级页面爬取,程序运行顺序问题

# -*- coding: utf-8 -*-
import scrapy
from SYDW.items import SydwItem
class DanweiCrawlingSpider(scrapy.Spider):
    # 继承自Spider类
    name = 'danwei_crawling'
    allowed_domains = ['chinasydw.org']#允许域名
    start_urls = ['http://www.chinasydw.org']
    base_domain = 'http://www.chinasydw.org'

    def parse(self, response):
        province = response.xpath("//div[@class='fenzhan']//a/@href")
        for each_p in province:
            yield scrapy.Request(each_p.get(),callback=self.get_page)


    def get_page(self,response):
        for each in response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]"):
            item = SydwItem()
            name = response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]/a[not(@style)]/text()").get()
            time = response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]/span[@class='time']/text()").get()
            link = response.xpath("//div[@class='body']/ul[@class = 'list11 clearfix']/li[not(@class='ivl')]/a[not(@style)]/@href").get()
            item['name']=name
            item['time']=time
            item['link']=link
            yield item
        next_url = response.xpath("//div[@class='pageset']/a[last()]/@href").get()
        yield scrapy.Request(self.base_domain+next_url,callback=self.get_page,meta={'item':item})

思路:
parse函数获取分站信息
然后进入分站,获取分站每一页信息。

问题:
爬取顺序问题:
按设想应该是进入分站——爬取完多个页面——进入下一个分站——爬取完多个页面;实际上运行结果是进入分站——爬取完当前页面——进入下一个分站——爬取完当前页面,直到所有分站遍历完后再开始进入分站的下一页。

初学scrapy,希望得到大家的帮助。

  • 写回答

1条回答

  • 进击的Coders 2020-12-23 14:12
    关注

    我也遇到了这个问题,你解决了吗

    评论

报告相同问题?

悬赏问题

  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)