Scrapy中如何实现迭代爬取的思路实现

引言

 在Scrapy进行数据爬取的时候,直接能够爬取到目标数据的概率不大,一般都是需要通过几层URL地址的爬取,才能最终获取到想要的结果数据,那该如何实现这些目标呢?

爬虫设计思路

 在Scrapy中定义的Request和FormRequest对象都提供了callback字段,运行在爬取网页之后,可以执行callback方法,进行结果响应.
 基本的思路就是在callback()中实现对于下一层URL Web页面路径定义,并创建出响应的Request对象,通过yield的方式交给Scrapy框架。
 这里的嵌套层次是没有限制的,一般都是通过不同的callback来实现分层爬取。
 如果在Request中未指定callback方法,则默认会调用parse()方法,在spider内部定义的内置方法,在自定义的spider中重写.
 start_requests()是在spider中定义的内置方法,提供自自定义的request对象声明扩展方式.

代码实现

具体的实现代码如下:

def start_requests(self):
   .........
   for i in range(1, 2):
       formdata['PagesUpDown$edtPage'] = str(i)
       yield FormRequest(url=self.start_urls[0],           
         headers=self.headers, formdata=formdata,  
            callback=self.parse_school)
def parse_school(self, response):
    urls = response.xpath('//*[@id="SpanSchoolList"]/div/div[2]/ul/li/a/@href').extract();
    for url in urls:
        request_url = self.base_url + url
        yield scrapy.Request(request_url, 
          headers=self.request_headers,  cookies=self.cookies,  
          callback=self.parse_major_enroll, meta=self.meta)
 def parse_major_enroll(self, response):
     ......

这里的实现了2层的网络Web爬取,parse_shool()是第一层的处理逻辑,parse_major_enroll()方法是第二层web页面的处理逻辑.

总结

Scrapy提供了良好的拓展机制,帮助开发者聚焦于其业务和数据模型,其余的工作由Scrapy来提供实现和配置.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值