scrapy分页抓取川大公管学院老师信息

关于任务思考:
1.确定爬虫入口:

start_urls = [
        'http://ggglxy.scu.edu.cn/index.php?c=article&a=type&tid=18&page_1_page=1',
    ]

确定爬虫入口应该是编写爬虫的第一步,但是很不幸,我在第一步就走偏了
,从公共管理学院首页进到师资队伍页面获得的网址是

http://ggglxy.scu.edu.cn/index.php?c=article&a=type&tid=18

但是从这个网址我无法获得下一页的绝对链接,在执行爬虫的过程中,我就遇上了URLERROR的错误。

  1. 爬取思路:
图片.png

从这张图,可以看出,我们可以在目录页抓取教师姓名、教师职位、教师所属专业、教师邮箱,因此我们只需要在详情页获取教师的简介就可以了。

下一页.png

从网站的目录页中,每页有八项数据,我需要拿到每一项的数据的链接,同时还需要拿到「下一页」的链接。因为下一页的结构和第一页的结构相同,所以我将下一页的连接传给pasre处理,而每一项数据的链接交给pasre_content处理。

  1. 代码实现:
    3.1 items.py文件:
class TeacherItem(scrapy.Item)
     name = scrapy.Field()    #教师姓名
     position = scrapy.Field()  #教师职位
     intro = scrapy.Field()   #教师   
     email = scrapy .Field() #教师邮箱
     major = scrapy.Field()#教师所属专业
     pass

3.2 spider代码:
处理目录页的教师信息的代码:

 def parse(self,response):
        for quote in response.css('ul.teachers_ul.mt20.cf li.fl'):
            item = TeacherItem()
            item['name'] = quote.css('div.r.fr h3.mb10::text').extract_first()#教师名字
            item['position'] = quote.css('div.r.fr p.color_main.f14::text').extract_first()#教师职位
            item['major'] = quote.css('div.r.fr div.desc p::text').extract_first()#教师所属专业
            item['email'] = response.xpath('//div[@class="r fr"]/div[@class="desc"]/p[last()]/text()').extract()#教师邮箱
            url = response.urljoin(quote.css('div.l.fl a::attr("href")').extract_first())#教师详情页链接
            request=scrapy.http.Request(url,callback=self.parse_content)#将获取的信息传给详情页处理器
            request.meta['item']=item
            yield request

处理下一页的链接的代码:

      next_page = response.xpath('//div[@class="pager cf tc pt10 pb10 mobile_dn"]/li[last()-1]/a/@href').extract_first()   #获取下一页的链接
        if next_page is not None:
            next_full_url = response.urljoin(next_page)
            yield scrapy.Request(next_full_url, callback=self.parse)  #判断是有有下一页,有的话,就将url传给自身

处理每一项数据链接的代码:

 def parse_content(self,response):
        for site in response.css('div.js_infobox.cf'):
            item = response.meta['item']#接收meta传递过来的数据,即姓名、邮箱、职位等信息
            item['intro']= site.css('div.r.fr div.desc::text').extract_first()
            yield item

在编写这个代码的过程中,我认为元素的定位是最难的,路径不对数据就爬不出。
3.3 执行爬虫
同样使用scrapy crawl quotes命令来执行爬虫,爬取之后下载文件,打开:

数据.png

由于文件默认的是unicode编码格式,所以我爬取到的数据是一堆我看不懂数据。我首先尝试了同学使用过并可行的
scrapy crawl quotes -o teacher.json -s FEED_EXPORT_ENCODING=utf-8
命令,结果生成的还是unicode编码格式的文件。
3.4 处理unicode编码问题
通过网上查找,我运用了下面的方法解决问题:
修改pipelines.py文件:

import json
import codecs


class QuotesPipeline(object):
    def __init__(self):
        self.file =codecs.open('teacher.json','wb',encoding='utf-8')
    def process_item(self, item, spider):
        line=json.dumps(dict(item))+'\n'
        self.file.write(line.decode("unicode_escape"))
        return item

在pipelines.py这个文件中,通过编写QuotesPipeline来实现对item的处理。它主要完成数据的查重、丢弃,验证item中的数据,将得到的item数据保存等工作。其中 process_item方法将得到的item实现解码,以便正常显示中文,最终保存到json文件中。
在编写完pipelines.py后,为了启动它,必须将其加入到ITEM_PIPELINES配置中:

ITEM_PIPELINES = {
    'quotes.pipelines.QuotesPipeline':300
}

修改完这些文件后,我再次执行spiders,将得到的结果保存并下载:

图片.png

这次,数据显示正常,共抓取到了128位老师的信息,其中包括了教师的姓名、职位、所属专业、邮箱与简介。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容