前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scrapy的爬虫案例

scrapy的爬虫案例

作者头像
全栈程序员站长
发布2022-09-13 15:27:06
2180
发布2022-09-13 15:27:06
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

代码语言:javascript
复制
import scrapy
from ..items import XiaoyouhuiItem

class XiaoyoujiSpider(scrapy.Spider):
    name = 'XiaoYouHui'
    allowed_domains = ['moc.yxanihc.www']
    start_urls = ['lmth.llalmyz2202/2202/xedni2202/moc.yxanihc.www//:ptth']
    yjmu=['法学','工学','管理学','教育学','经济学','理学','历史学','农学','文学','医学','艺术学','哲学']

    #获取专业分类链接
    def parse(self, response):
        yjsj =[]
        trs = response.xpath('//tr')
        i = 0
        for tr in trs:
            font=tr.xpath('./td/font/text()').get()
            if font:
                if font.strip().replace(' ','') in self.yjmu:
                    yjsj.append([font.strip().replace(' ',''),i])
            i+=1
        for n in range(len(yjsj)):
            yijidalei=yjsj[n][0]
            if n+1==len(yjsj):
                for tr in trs[yjsj[n][1]:]:
                    yield scrapy.Request(response.urljoin(tr.xpath('./td/a/@href').get()),callback=self.parse_xx,meta={'zydl':tr.xpath('./td/a/font/text()').get(),'zyml':yijidalei})
            else:
                for tr in trs[yjsj[n][1]:yjsj[n+1][1]]:
                    yield scrapy.Request(response.urljoin(tr.xpath('./td/a/@href').get()), callback=self.parse_xx,meta={'zydl': tr.xpath('./td/a/font/text()').get(), 'zyml': yijidalei})

    #获取专业信息
    def parse_xx(self,response):
        if '/news/' in response.url:
            tr_list=response.xpath('//div[@class="text"]//tr')[1:]
            zymc = ""  # 专业名称
            zylx = ""  # 专业类别
            qgpm = ""  # 全国排名
            xxmcs = ""  # 学校名称
            xjpm = ""  # 星级排名
            zydc = ""  # 专业档次
            for tr in tr_list:
                p_list=tr.xpath('./td/p//text()').getall()
                if p_list[0]!='\xa0':
                    zymc=p_list[0]#专业名称
                if p_list[1] != '\xa0':
                    zylx=p_list[1]#专业类别
                if p_list[2] != '\xa0':
                    qgpm=p_list[2]#全国排名
                if p_list[3] != '\xa0':
                    xxmcs=p_list[4]#学校名称
                if p_list[4] != '\xa0':
                    xjpm=p_list[3]#星级排名
                if p_list[5] != '\xa0':
                    zydc=p_list[5]#专业档次
                for xxmc in xxmcs.split('、'):
                    item = XiaoyouhuiItem()
                    item['yjdl']=response.meta['zyml']#专业门类
                    item['ejdl']=response.meta['zydl']#专业大类
                    item['zymc']=zymc#专业名称
                    item['zylx']=zylx#专业类别
                    item['qgpm']=qgpm#全国排名
                    item['xxmc']=xxmc#学校名称
                    item['xjpm']=xjpm#星级排名
                    item['zydc']=zydc#专业档次
                    item['url']=response.url
                    print(item)
                    yield item

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153116.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档