当前位置: 移动技术网 > IT编程>脚本编程>Python > python爬虫scrapy项目详解(关注、持续更新)

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

2018年12月19日  | 移动技术网IT编程  | 我要评论

翻翻棋,二手化工设备网,dpscycle

python爬虫scrapy项目(一)

  爬取目标:腾讯招聘网站(起始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打开该文件目录,会在你的当前目录创建如下文件目录。

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) + ", \n"
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, like gecko) chrome/19.0.1063.0 safari/536.3",
    "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/5.0 (windows nt 6.1; wow64) 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)",
    "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/536.3 (khtml, 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.1 safari/536.3",
    "mozilla/5.0 (windows nt 6.2) 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"], "place": ["深圳"], "time": ["2018-12-19"], "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"], "place": ["深圳"], "time": ["2018-12-19"], "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-腾讯社交广告高级系统测试工程师(研发中心 北京)"], "position_type": ["技术类"], "persons": ["1"], "place": ["北京"], "time": ["2018-12-19"], "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": ["产品/项目类"], "persons": ["2"], "place": ["深圳"], "time": ["2018-12-19"], "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-应用宝数据挖掘算法工程师(深圳)"], "position_type": ["技术类"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "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-游戏后台开发工程师(深圳)"], "position_type": ["技术类"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "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歌项目经理(深圳)"], "position_type": ["产品/项目类"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "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-高级语音算法工程师(上海)"], "position_type": ["技术类"], "persons": ["1"], "place": ["上海"], "time": ["2018-12-19"], "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-游戏发行/运营培训生(深圳)"], "position_type": ["产品/项目类"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46481&keywords=&tid=0&lid=0", "work_duty": "['游戏发行/运营培训生项目致力于培养高潜力的游戏运营人才,以满足快速增长游戏业务需求;', '项目采用定制化的培养方式,通过专班学习,名师辅导和项目实战,提升学员的产品sense、运营能力及通用素质,使学员成为优秀的游戏发行/运营人才。', '协助项目制作人与研发商共同制定运营目标和工作计划,约定的各阶段游戏优化、运营开发和运营支持工作;', '推动游戏研发商的日常沟通,密切关注研发和运营筹备进度同时提供必要协助;', '指导并支持项目组内不同职能员工的日常工作,推动合作部门的目标和工作计划制定;', '根据项目需求,制定并推广项目流程规范,确保项目有序推进;', '及时发现并跟踪解决项目问题,有效管理项目风险。']", "work_request": "['热爱并乐于体验游戏,对研发与运营有一定的了解,保持强烈的好奇心和求知欲;', '优秀的中英文读写能力;', '积极主动,能够承受高压的工作。']"}, 
11 {"position": ["25928-高级图形开发工程师(上海)"], "position_type": ["技术类"], "persons": ["3"], "place": ["上海"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46480&keywords=&tid=0&lid=0", "work_duty": "['负责游戏引擎图形相关特性的开发;', '负责渲染流程和算法的优化,以及相关工具的开发;', '负责图形兼容性分析以及疑难问题的分析定位工作。']", "work_request": "['本科以上学历,精通c/c++,具备扎实的数据结构和算法基础,熟悉常用设计模式;', '具备计算机图形学知识,熟练掌握3d图形渲染技术,熟悉opengl以及shader开发;', '熟练掌握3d游戏引擎架构, 熟悉3d引擎的接口和游戏制作流程;', '3年以上3d引擎(unreal、unity等)开发经验,一年以上渲染相关开发和优化经验;', '深刻理解客户端框架和其他核心模块的实现,有主导过核心模块的开发经验者优先;', '熟悉移动端gpu/cpu架构,有移动端渲染开发经验者优先;', '责任心强,善于沟通,对游戏前沿技术应用抱有热情。']"}, 
12 {"position": ["28481-健康保险行业合作高级经理(深圳)"], "position_type": ["市场类"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "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-前端测试开发工程师(深圳)"], "position_type": ["技术类"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "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产品自动化测试经验。']"}, 
......

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网