加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python爬虫scrapy项目详解(关注、持续更新)!

发布时间:2020-12-17 00:25:18 所属栏目:Python 来源:网络整理
导读:爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.php?keywords=tid=0start) 爬取内容:职位;职位类型;招聘人数;工作地点;发布时间;招聘详细链接;工作职责;工作要求 反反爬措施:设置随机user-agent、设置请求延时操作、 1、开始

爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.php?keywords=&tid=0&start)

爬取内容:职位;职位类型;招聘人数;工作地点;发布时间;招聘详细链接;工作职责;工作要求

反反爬措施:设置随机user-agent、设置请求延时操作、

1、开始创建项目

1 scrapy startproject tencent

2、进入tencent文件夹,执行启动spider爬虫文件代码,编写爬虫文件。

1 scrapy genspider hr "tencent.com"

命令执行完,用Python最好的IDE---pycharm打开该文件目录,会在你的当前目录创建如下文件目录。

进群:960410445? ?

3、编写该目录下的items.py文件,设置你需要爬取的字段。

 1 class TencentItem(scrapy.Item):
 2 # define the fields for your item here like:
 3 # 职位
 4 position = scrapy.Field()
 5 # 职位类型
 6 position_type = scrapy.Field()
 7 # 招聘人数
 8 persons = scrapy.Field()
 9 # 工作地点
10 place = scrapy.Field()
11 # 招聘发布时间
12 time = scrapy.Field()
13 # 职位详细链接
14 detail_link = scrapy.Field()
15 # 工作职责
16 work_duty = scrapy.Field()
17 # 工作要求
18 work_request = scrapy.Field()

4、进入spiders文件夹,打开hr.py文件,开始编写爬虫文件

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 import re
 4 from items import TencentItem
 5 
 6 class HrSpider(scrapy.Spider):
 7 name = 'hr'
 8 allowed_domains = ['tencent.com']
 9 offset = 0
10 original_url = 'https://hr.tencent.com/position.php?keywords=&tid=0&start='
11 # 设置动态起始url
12 start_urls = ['https://hr.tencent.com/position.php?keywords=&tid=0&start=' + str(offset)]
13 
14 def parse(self,response):
15 # 编写xpath规则提取需要的数据,进行数据清洗。
16 trs = response.xpath("//table[@class='tablelist']//tr")[1:-1]
17 for tr in trs:
18 item = TencentItem()
19 item["position"] = tr.xpath("./td[1]/a/text()").extract()
20 item["position_type"] = tr.xpath("./td[2]/text()").extract()
21 item["persons"] = tr.xpath("./td[3]/text()").extract()
22 item["place"] = tr.xpath("./td[4]/text()").extract()
23 item["time"] = tr.xpath("./td[5]/text()").extract()
24 link_part = tr.xpath("./td[1]/a/@href").extract_first()
25 # 分析网址结构,拼接正确的职位详细链接
26 url_detail = item["detail_link"] = 'https://hr.tencent.com/' + link_part
27 # 将找到的详细链接yield 到scrapy的调度器,调度器进行入队列,依次发送请求。
28 yield scrapy.Request(url=url_detail,29 callback=self.parse_next_url,#编写处理链接的回调函数
30 meta = {"item":item},31 )
32 # 进行翻页操作
33 if self.offset < 2870:
34 self.offset += 10
35 url_send = self.original_url + str(self.offset)
36 yield scrapy.Request(
37 url=url_send,38 callback=self.parse,39 )
40 # 编写回调函数
41 def parse_next_url(self,response):
42 item = response.meta["item"]
43 item["work_duty"] = response.xpath("//table[@class='tablelist textl']//tr[3]//ul//text()").extract()
44 item["work_request"] = response.xpath("//table[@class='tablelist textl']//tr[4]//ul//text()").extract()
45 item["work_duty"] = re.sub(r'(xa0)','',str(item["work_duty"]))
46 item["work_request"] = re.sub(r'(xa0)',str(item["work_request"]))
47 yield item

5、编写pipeline.py文件,处理接收到的数据

 1 import json
 2 
 3
 4 class TencentPipeline(object):
 5 # 自定义一个打开文件,写入文件的方式存储数据
 6 def __init__(self):
 7 self.f = open("tencent.json","wb")
 8 
 9 def process_item(self,item,spider):
10 # 当item文件中有中文时,ensure默认是用ascii编码中文
11 content = json.dumps(dict(item),ensure_ascii= False) + ","
12 self.f.write(content.encode("utf-8"))
13 return item
14 
15 def close_file(self):
16 self.f.close()

6、设置setting.py文件,配置scrapy运行的相关内容

DOWNLOADER_MIDDLEWARES = {
 'tencent.middlewares.RandomUA': 543,}
ITEM_PIPELINES = {
 'tencent.pipelines.TencentPipeline': 300,# 'scrapy_redis.pipelines.RedisPipeline': 400,}
USER_AGENT = [
 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML,like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML,like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML,like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML,like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML,like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML,like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML,like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML,like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML,like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML,like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML,like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML,like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
# 设置请求延时操作
DOWNLOAD_DELAY = 1

7、设置middlewares.py文件,对请求进行处理。

class RandomUA(object):
# 设置随机请求头
 def process_request(self,request,spider):
 UA = random.choice(USER_AGENT)
 request.headers["user-agent"] = UA

8、设置爬虫的启动文件start.py

1 from scrapy.cmdline import execute
2 execute("scrapy crawl hr".split())

9、执行效果如下。(保存为json数据格式的字符串到本地)

 1 {"position": ["25928-高级图形开发工程师(深圳总部)"],"position_type": ["技术类"],"persons": ["3"],"place": ["深圳"],"time": ["2018-12-19"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46479&keywords=&tid=0&lid=0","work_duty": "['负责游戏引擎图形相关特性的开发;','负责渲染流程和算法的优化,以及相关工具的开发;','负责图形兼容性分析以及疑难问题的分析定位工作。']","work_request": "['本科以上学历,精通C/C++,具备扎实的数据结构和算法基础,熟悉常用设计模式;','具备计算机图形学知识,熟练掌握3D图形渲染技术,熟悉OpenGL以及Shader开发;','熟练掌握3D游戏引擎架构, 熟悉3D引擎的接口和游戏制作流程;','3年以上3D引擎(Unreal、Unity等)开发经验,一年以上渲染相关开发和优化经验;','深刻理解客户端框架和其他核心模块的实现,有主导过核心模块的开发经验者优先;','熟悉移动端GPU/CPU架构,有移动端渲染开发经验者优先;','责任心强,善于沟通,对游戏前沿技术应用抱有热情。']"},2 {"position": ["25667-渠道销售经理(深圳)"],"position_type": ["市场类"],"persons": ["2"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46485&keywords=&tid=0&lid=0","work_duty": "['担任腾讯云渠道经理,负责区域渠道体系建设及产品销售;','定期拜访渠道合作伙伴,充分了解客户需求并积极跟进,制定合理方案,负责方案提示、谈判,追踪公司相关部门的工作,保证方案的有效实施;','维持与现有合作伙伴的良好业务关系,及时更新公司产品信息,传达企业及品牌文化。']","work_request": "['本科及以上学历,计算机、电信、市场营销或其它相关专业;','软件或互联网行业五年以上相关工作经验;','具有丰富的渠道销售、区域管理及长尾中小企业客户覆盖经验;','具有企业级应用软件销售经验,具有云计算及互联网行业渠道销售经验优先;','能够有效通过渠道覆盖中长尾客户,承担区域销售业绩;','能够建立区域渠道体系,有效处理渠道冲突与风险防范;','能够主导制定各种服务与激励方式,持续提高渠道合作伙伴的满意度;','具有出色的协调能力,良好的团队合作精神;为人诚信,工作敬业,有责任心。']"},3 {"position": ["28481-医疗健康UI开发工程师(深圳)"],"position_type": ["设计类"],"persons": ["1"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46476&keywords=&tid=0&lid=0","work_duty": "['负责腾讯觅影,智慧医院等相关医疗产品的前端组件的编写,web开发工作;','根据产品与设计要求,不断优化前端架构,改善用户体验。参与相关UI组件体系的建立、维护等。']","work_request": "['网页重构或web前端开发工作2年以上; ','精通HTML5,CSS3,JavaScript构建高性能web应用;掌握React或Vue并有相关实战经验,掌握主流前端构建工具grunt,gulp,webpack;','精通UI组件化开发、动效开发、响应式、多终端适配、无障碍有一定开发经验;','有node.js/vue/react开发经验者优先,有前端性能、工具研发方面的实践经验优先。','对Web性能、安全相关有一定的了解; ','有创新精神并能积极学习业界新技术,顺畅的沟通合作能力。']"},4 {"position": ["SA-腾讯社交广告高级系统测试工程师(研发中心 北京)"],"place": ["北京"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46486&keywords=&tid=0&lid=0","work_duty": "['参与互联网软件产品测试的全流程,包括参与需求分析、设计评审,制定测试计划,设计和执行测试用例,进行缺陷跟踪和软件质量分析等;','制定测试计划,构建测试环境,执行集成测试,回归测试等; ','保证被测系统的质量,并通过测试流程和方法创新,努力提升研发的质量和效率。']","work_request": "['工科、计算机或其他相关专业本科以上学历;','熟悉C/C++/Java等至少一种编程语言,有Shell或Ruby/PHP/Perl/Python等使用经验者优先;','至少1年以上软件开发、自动化测试工作经验;','有性能、安全、白盒测试等专业测试领域经验者优先;','具备互联网广告、搜索、大数据处理、分布式系统、数据库和网络等业务领域测试经验者优先; ','熟悉Linux或Unix操作系统;','精通测试流程和测试用例设计方法,能主动进行技术钻研;','解决复杂问题和编写自动测试工具和系统的能力;','很强的逻辑思维能力,谈判的能力和冲突管理的能力;','善于团队合作,理解和适应变化,以结果和行动为准则,努力追求成功。']"},5 {"position": ["25664-政府行业交付项目经理"],"position_type": ["产品/项目类"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46484&keywords=&tid=0&lid=0","work_duty": "['1、负责腾讯云政府行业的项目交付管理工作;','2、负责项目资源的组织与协调,确保项目团队各干系人及内外部合作团队的协同工作; ','3、负责项目计划的制定、跟踪与维护,确保项目按计划完成,并解决交付中的各类问题;','4、协助收集客户需求和用户反馈,驱动研发团队完善产品,确保项目顺利通过验收。']","work_request": "['1、全日制统招本科及以上学历,5年以上政府行业经验,至少深入参与5个政府行业大中型项目;','2、有在大型企业工作的经历,管理过20人以上的项目团队,有丰富的跨部门、跨组织沟通协调经验,能够应对复杂的项目环境;','3、熟悉研发过程,包括产品设计、需求分析、架构设计、开发、测试、运维等,熟悉敏捷开发过程;','4、有出色的沟通能力和技巧,能够想方设法推动项目的顺利进行,有强烈的结果导向意识;','5、具备良好的项目管理、客户关系维护能力,和优秀的沟通技巧,能妥善协调好客户、合作伙伴、内部团队的合作关系;','6、有非常强的事业心、责任感和担当精神,有较强的抗压能力,能并行处理多个项目工作,能承受一定程度的出差或驻场工作;','7、有PMP、ITIL证书者优先,信息产业部系统集成项目经理证书者优先。']"},6 {"position": ["PCG14-应用宝数据挖掘算法工程师(深圳)"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46483&keywords=&tid=0&lid=0","work_duty": "['负责提供合适的推荐算法模型;','负责研究业内领先的技术,结合腾讯各个业务平台的数据,根据应用中心和社交渠道这两个场景给出具体的实验数据,并且评估结果;','负责根据不同的算法模型,上报业务需要的统计数据,协助各种算法的实施;','研究已有算法的瓶颈,提出合理的改进措施和解决方案。']","work_request": "['计算机、应用数学、人工智能、模式识别、统计、自控等专业的硕士或者博士优先;','2年以上相关工作经验;','对机器学习、数据挖掘算法及其在互联网上的应用有比较深入的理解;','熟悉掌握C/C++语言;','有大规模分布式计算平台的使用和并行算法开发经验;','严密的数学思维、突出的分析和归纳能力、优秀的沟通表达能力;','有互联网广告,电商,搜索等方面推荐经验优先。']"},7 {"position": ["19867-游戏后台开发工程师(深圳)"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46482&keywords=&tid=0&lid=0","work_duty": "['负责游戏后台架构设计;','负责游戏后台系统模块以及新特性开发;','负责服务器性能优化和体验优化。']","work_request": "['2年以上游戏服务器后台工作经验,有完整的项目经验;','扎实的编程基础,对高在线大并发游戏后台架构有一定认识;','熟悉Unix/Linux操作系统下的C/C++开发;','熟悉TCP/IP协议相关知识,熟悉网络编程,熟悉数据库;','了解游戏服务器架构及性能优化方法;','具备良好的分析解决问题能力,能独立承担后台逻辑系统开发工作;','高度的责任心、良好的沟通能力和团队合作精神。']"},8 {"position": ["TME-全民K歌项目经理(深圳)"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46478&keywords=&tid=0&lid=0","work_duty": "['负责全民K歌版本计划制定,风险监控,过程跟踪,保障版本目标的实现;','负责FT内目标确认,目标拆解,资源分配以及目标达成情况跟进,推动各角色协同工作;','发现、总结、跟踪过程问题,推动团队各环节持续改进,提高效率。']","work_request": "['本科以上学历,计算机或相关专业;','3年以上软件项目管理经验,有互联网、软件领域技术开发经验优先;','精通软件项目过程管理,对敏捷项目管理有实际应用经验及深刻理解;','具有良好的执行力和责任心,能推动项目团队朝目标前进;','具有丰富的与人沟通、交流和组织能力,出色的团队合作精神;']"},9 {"position": ["25928-高级语音算法工程师(上海)"],"place": ["上海"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46477&keywords=&tid=0&lid=0","work_duty": "['负责游戏语音算法优化;','负责语音前沿技术研究;','负责游戏语音现网版本算法维护升级。']","work_request": "['本科及以上学历;','熟悉PC/Android/iOS SDK任一平台C/C++开发,性能优化; ','熟悉数字信号处理,数学功底扎实,熟悉MATLAB仿真; ','熟悉语音前处理算法AEC,AGC,VAD,NS,CNG,JitterBuffer,Mix等算法;','熟悉常见Codec,Opus/AAC/Speex等;','有AI语音前处理经验优先;','熟悉WebRTC,Speex,Opus等开源代码。']"},10 {"position": ["HY-游戏发行/运营培训生(深圳)"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46481&keywords=&tid=0&lid=0","work_duty": "['游戏发行/运营培训生项目致力于培养高潜力的游戏运营人才,以满足快速增长游戏业务需求;','项目采用定制化的培养方式,通过专班学习,名师辅导和项目实战,提升学员的产品sense、运营能力及通用素质,使学员成为优秀的游戏发行/运营人才。','协助项目制作人与研发商共同制定运营目标和工作计划,约定的各阶段游戏优化、运营开发和运营支持工作;','推动游戏研发商的日常沟通,密切关注研发和运营筹备进度同时提供必要协助;','指导并支持项目组内不同职能员工的日常工作,推动合作部门的目标和工作计划制定;','根据项目需求,制定并推广项目流程规范,确保项目有序推进;','及时发现并跟踪解决项目问题,有效管理项目风险。']","work_request": "['热爱并乐于体验游戏,对研发与运营有一定的了解,保持强烈的好奇心和求知欲;','优秀的中英文读写能力;','积极主动,能够承受高压的工作。']"},11 {"position": ["25928-高级图形开发工程师(上海)"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46480&keywords=&tid=0&lid=0",12 {"position": ["28481-健康保险行业合作高级经理(深圳)"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46474&keywords=&tid=0&lid=0","work_duty": "['1、负责商业保险行业客户资源拓展(包括不限于保险公司、创新保险平台、行业协会等专业领域);','2、拓展相关行业合作伙伴以及合作机构,整合公司已有产品和资源,形成场景化的创新解决方案;','3、搜集整理健康保险行业的市场动态、政策变动等行业信息,解读反馈助推业务策略制定;','4、整合资源,设计制定并推进商业合作方案落地,有效撬动行业资源合作。']","work_request": "['1、全日制本科及以上学历,三年以上健康保险领域工作经验;','2、熟悉保险行业,有健康险创新产品运营经验或创新平台运营经验; ','3、具备良好的沟通表达能力,清晰的思维逻辑,敏锐的洞察力,较强的自驱力和执行力; ','4、对工作有高度的责任心和激情,注重团队合作,适应频繁差旅需求。']"},13 {"position": ["25928-前端测试开发工程师(深圳)"],"detail_link": "https://hr.tencent.com/position_detail.php?id=46473&keywords=&tid=0&lid=0","work_duty": "['负责平台类软件的测试开发工作;','负责平台组件的接口测试、单元测试工作;','能够在关键技术上给予团队技术指引和支持;','按时完成安排的移动端开发任务;','负责与项目组之间的协调,推动工作,帮助项目组推动整个项目质量的提升。']","work_request": "['本科及以上学历,计算机相关专业,开发或者测试开发出身,有软件开发的基础;','2-3年以上软件行业或者互联网行业经验,熟悉Windows编程或Android/iOS编程;','熟悉软件开发流程,熟悉Android/iOS环境下自动化测试技术;','扎实的测试用例设计能力,熟悉主流自动化方法;','具备扎实的C++、C或Object-C程序设计基础。','有以下任意一项经验者优先:','较强的DEBUG能力;','有Android、iOS产品自动化测试经验。']"},......

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读