爬虫Scrapy框架学习(六)-腾讯招聘网站台爬取案例-深究CrawlSpider类在项目中的具体功能

news/2024/5/18 15:21:58/文章来源:https://blog.csdn.net/hot7732788/article/details/88935289

在本案例中将对传统Spider类和CrawlSpider在实际项目中的应用进行对比,所完成的功能为一样的结果,采用三种不同的方式进行代码编写,请读者自行学习。

  • 传统Spider实现数据爬取
  • CrawlSpider实现数据读取(网站解析有问题暂时不能够实现)和页面跳转
  • CrawlSpider实现单一页面跳转并采用传统scrapy方式进行数据爬取功能

1.项目框架展示

在这里插入图片描述

2.爬取数据网站展示

在这里插入图片描述

3.三种不同爬虫代码展示

  • 1.传统Spider实现数据爬取

# -*- coding: utf-8 -*-
import scrapyclass HrSpider(scrapy.Spider):name = 'hr'allowed_domains = ['tencent.com']start_urls = ['http://hr.tencent.com/position.php']def parse(self, response):tr_list = response.xpath("//table[@class = 'tablelist']/tr")[1:-1] #去除第一个和最后一个--切片for tr in tr_list:item = {}item["title"] = tr.xpath("./td[1]/a/text()").extract_first()item["position"] = tr.xpath("./td[2]/text()").extract_first()item["publish_date"] = tr.xpath("./td[5]/text()").extract_first()yield item#找到下一页的url地址next_url = response.xpath("//a[@id='next']/@href").extract_first()if next_url != "javascript:;": #判断是否为最后一页next_url = "http://hr.tencent.com/" + next_urlyield scrapy.Request(next_url,callback = self.parse, #处理方式一样,所以交给自己处理)# def parse1(self, response):#     response.meta["item"] #实现item在不同解析函数之间的数据传输
  • 2.CrawlSpider实现数据读取(网站解析有问题暂时不能够实现)和页面跳转

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule#网站有问题,仅作为学习参考即可
class Hr2Spider(CrawlSpider):name = 'hr2'allowed_domains = ['tencent.com']start_urls = ['https://hr.tencent.com/position.php/']rules = (Rule(LinkExtractor(allow=r'position_detail\.php\?id=\d+&keywords=&tid=0&lid=0'), callback='parse_item'),Rule(LinkExtractor(allow=r'position\.php\?&start=\d+#a'), follow=True),#翻页功能)def parse_item(self, response):print(response.url)item = {}item["title"] = response.xpath("//td[@id='sharetitle']").extract_first()#item["qcquire"] = response.xpath("//div[text()=='工作要求:']/../ul/li/text()").extract()#多条文本print(item)
  • 此处网站解析有问题暂时无法实现详细简介爬取,在方法三中使用传统scrapy方法可以得到,请读者自行查看学习。如实在不理解哪里的错误可以留言给我。
  • 3.CrawlSpider实现单一页面跳转并采用传统scrapy方式进行数据爬取功能

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass Hr3Spider(CrawlSpider):name = 'hr3'allowed_domains = ['tencent.com']start_urls = ['https://hr.tencent.com/position.php/']rules = (# 提取翻页列表页的URL地址Rule(LinkExtractor(allow=r'position\.php\?&start=\d+#a'), callback='parse_item', follow=True),)def parse_item(self, response):tr_list = response.xpath("//table[@class='tablelist']/tr")[1:-1] #取出所有tr信息标签(去除了第一个无用tr标签)for tr in tr_list:item = {}item["title"] = tr.xpath("./td[1]/a/text()").extract_first()item["href"] = "https://hr.tencent.com/"+tr.xpath("./td[1]/a/@href").extract_first()yield scrapy.Request(item["href"],callback=self.parse_detail,meta = {"item":item})def parse_detail(self,response):item = response.meta["item"]item["aquire"] = response.xpath("//div[text()='工作要求:']/../ul/li/text()").extract()print(item)

4.pipeline.py展示

# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlclass TencentPipeline(object):def process_item(self, item, spider):print(item)return item

5.settings.py展示

# -*- coding: utf-8 -*-# Scrapy settings for tencent project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://doc.scrapy.org/en/latest/topics/settings.html
#     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://doc.scrapy.org/en/latest/topics/spider-middleware.htmlBOT_NAME = 'tencent'SPIDER_MODULES = ['tencent.spiders']
NEWSPIDER_MODULE = 'tencent.spiders'LOG_LEVEL = "WARNING"# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'# Obey robots.txt rules
ROBOTSTXT_OBEY = False# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16# Disable cookies (enabled by default)
#COOKIES_ENABLED = False# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'tencent.middlewares.TencentSpiderMiddleware': 543,
#}# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    'tencent.middlewares.TencentDownloaderMiddleware': 543,
#}# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'tencent.pipelines.TencentPipeline': 300,
}# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

6.效果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_844124.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用Python爬取小游戏网站,把喜欢的游戏收藏起来(附源码)

简介: Python 是一门简单易学且功能强大的编程语言,无需繁琐的配置,掌握基本语法,了解基本库函数,就可以通过调用海量的现有工具包编写自己的程序,轻松实现批量自动化操作,可以极大提高办公和学…

遇到网站的反爬虫机制,那么我们应该来如何应对呢?

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 1、使用代理 适用情况:限制IP地址情况,也可解决由于“频繁点击”而需要输入验证码登陆的情况。 这种情况最好的办法就是…

django网站部署流程

服务器 买个服务器,在管理控制台里开启80端口443端口,我用的是阿里云,学生免费试用一年(白嫖)远程登录到服务器,用scp将本地项目上传到云服务器 # win10的Powershell或者下载WinSCP软件 scp -r 本地项目文…

2008服务器网站设置密码,2008服务器怎么设置密码

2008服务器怎么设置密码 内容精选换一换代码迁移工具进行代码迁移时,需要调用Linux下的rpm、deb等命令才能完成扫描和迁移相关任务,这些命令和逻辑必须在后端Linux运行。IDE插件只支持以Web模式使用root用户安装工具,不支持以CLI模式安装工具…

vue - - - vuepress文档网站部署github

环境 安装nodejs: https://nodejs.org/en/, 版本不能太高(> 8.6即可) 安装git: https://git-scm.com/ Hello World vuepress官网: https://www.vuepress.cn/ 第3步需要等待下载依赖. 1~3步完整命令: zichenDESKTOP-3176F4L MINGW64 ~/Desktop $ mkdir vuepress-starter…

网站数据统计分析之一:日志收集原理及其实现

转 http://my.oschina.net/leejun2005/blog/292709 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计 和 腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于jav…

科技企业网站(1) - 开发背景 - 系统设计

1.开发背景 2.系统设计 2.1 系统目标 界面设计见解、友好、美观大方。操作简单、快捷方便。数据存储安全、可靠。信息分类清晰、准确。强大的模糊查询功能,保证数据查询的灵活性。提供灵活、方便的权限设置功能,使整个系统的管理明确。 2.2 系统功能…

科技企业网站(2) - ThinkPHP框架入门基础知识

1.基础概念 2.使用ThinkPHP框架开发的目录结构 ThinkPHP框架中目录分为两种:系统目录和项目目录。 系统目录是下载ThinkPHP框架库本身的,而项目目录是用户实际应用的目录。ThinkPHP采用自动创建文件夹的机制。 3.自动生成目录,编写入口文…

科技企业网站(3) - 数据库设计

1.数据库概要说明 采用MySQL数据库,用来存储图书相关信息、新闻相关信息、管理员信息等,这里将数据库命名为db_project,其中包含了3张数据表,用于存储不同的信息。 2.数据库概念设计 通过系统功能结构的确定,规划…

科技企业网站(5) - 业界新闻页面设计

1.ThinkPHP框架的导包和加载技术 2.业界新闻页面实现过程 循环输出二位数组的标签&#xff0c;此标签包含两个参数&#xff0c;name指定控制器中传递进来的模板变量&#xff0c;id指定模板变量中的临时变量。 <!DOCTYPE html> <html lang"zh-CN">&l…

科技企业网站(6) - 图书开发页面设计

一、图书开发模块实现过程 1.图片平滑滚动效果关键代码&#xff1a; <!-- 设置图片初始向左滚动并且每隔200毫秒滚动1个像素距离 --> <img src"../Public/Images/JavaII.jpg" width"140px" height"174px" /> <img src"../…

科技企业网站(7) - 后台登录模块

1.管理员权限控制技术 难点&#xff1a;如何才能防止用户越过表单登录到后台管理界面 解决&#xff1a;为了体现越过表单的可行性&#xff0c;笔者在编写的网站程序&#xff0c;故意将SESSION变量写到控制器中&#xff0c;这样任何一个用户都可以登录到网站的后台管理界面。但…

移动前端——通过Chrome自带的开发者工具Emulation模拟移动设备访问网站

一、使用方法 通过快捷键F12或ctrlshifti打开开发者工具&#xff0c;点击左上角类似手机的图标即可查看到Emulation所在的目录&#xff1b; 二、关于Emulation Device&#xff08;设备信息&#xff09;——Model 用于选择模拟的移动设备 ——Resolution 分辨率设置——Divic…

Docker 1--相关资源网站

大家好&#xff0c;我是神韵&#xff0c;是一个技术&生活博主。出文章目的主要是两个&#xff0c;一是好记忆不如烂笔头&#xff0c;记录总结中提高自己。二是希望我的文章可以帮到大家。欢迎来点赞打卡&#xff0c;你们的行动将是我无限的动力。 本篇主题是&#xff1a;相…

一家公司网站上的招聘人才招聘栏目

我不做任何评价。 转载于:https://www.cnblogs.com/Johnson/archive/2007/06/13/782211.html

出租空间位置,给您的网站做连接!

为防止空间位置的浪费&#xff0c;特批了一块地下来&#xff0c;让大家来踩&#xff0c;呵呵&#xff0c;需要搞连接的直接留言&#xff0c;嘿嘿&#xff0c;不过&#xff0c;可不是完全免费的哦&#xff01;转载于:https://blog.51cto.com/sam2080/8093

20个使用网页大背景的网站设计案例

网站大背景使用得好的话&#xff0c;能够让网页看起来有一个非常整体一致的效果&#xff0c;下面与大家分享20个使用网页大背景的网站设计案例。 kuletos.com benthomsonphoto.com gardenerandmarks.com.au krijtenberg.nl demainjarrete.stpo.fr lettercaseapp.com hdqt.co.uk…

从670万天价政府网站看程序员的安全意识

根据财政部网站的中标公告&#xff0c;功能并不复杂的中国工会网站扩建项目一期工程居然花了670万元。这个网站已经被网友戏称为史上最贵网站。众所周知&#xff0c;由于技术发展迅速&#xff0c;现在类似的内容网站的建站成本已经非常低&#xff0c;即使是重新开发所有功能&am…

网站测试自动化系统—数据驱动测试

在前面的文章网站测试自动化系统—基于Selenium和VSTT当中&#xff0c;我简单介绍了使用selenium录制测试步骤&#xff0c;以及优化生成的C#代码&#xff0c;对代码使用面向对象的编程理念进行一些封装&#xff0c;以便规避网站界面更动对测试代码所带来的风险。 在网站测试当中…