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. 外接函数,就是上文代码所用的方法。
对于三种方法各有各的好处,应视情况而定。