Python学习日记 Scrapy框架 3.多网页爬虫

Python学习日记 Scrapy框架 3.多网页爬虫

在上一次的学习中,只能实现单一网页中的爬虫,遇到需要跳转的情况时,爬虫就无法良好的运行。

同样适用教师信息爬虫为例子。

1. 需要跳转的链接索引方式

通过F12开发者工具

通过上图,我们若需要跳入“安庆龙”链接时,通过右边可以发现是进入了http://me.sjtu.edu.cn/teacher_directory1/anqinglong.html通过Copy Xpath得到该条信息xpath://*[@id="xx_zm_nr"]/li[1]/a

通过response.xpath:

我们需要得到href标签中的信息,所以我们通过:

这样得到了需要跳转的页面信息。

2. 代码实现

然后我们通过重新响应新的urls完成达到跳转的目的。

如下是spider代码:

# -*- coding: utf-8 -*-
import scrapy

from new3.items import New3Item
class WSpider(scrapy.Spider):
    name = 'w'  # 爬虫名
    allowed_domains = ['me.sjtu.edu.cn']  # 允许爬虫范围
    start_urls = ['http://me.sjtu.edu.cn/teacher_directory1.html']  # 第一个爬取url

    def parse(self, response):
        teacher_list = response.xpath('//*[@id="xx_zm_nr"]/li/a').xpath('@href').extract()
        # 实例化类
        for new_urls in teacher_list:
            yield scrapy.Request(new_urls, callback=self.parse_detail)
    def parse_detail(self, response):
        item = New3Item()
        info = response.xpath('//div[@class = "txtk"]')
        for each1 in info:
            item['name'] = each1.xpath('./p/b/text()').extract()[0]
            item['level'] = each1.xpath('./p/text()').extract()[0]
            yield item

在这里主要使用scrapy.Request函数实现url的跳转

scrapy.Request(url,callback)
#url : 重新请求的url
#callback : 回调函数,用于接收请求后的返回信息,若没指定,则默认为parse()函数

对于多网页爬虫我们通常可以使用三种方法:

1. 对start_urls做出多个输入

start_urls = [URL1,URL2,URL3,....]

2. 递归,callback=self.parse

3. 外接函数,就是上文代码所用的方法。

对于三种方法各有各的好处,应视情况而定。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值