Scrapy:腾讯招聘整站数据爬取
项目地址:https://hr.tencent.com/
步骤一、分析网站结构和待爬取内容
以下省略一万字
步骤二、上代码(不能略了)
1、配置items.py
import scrapy class HrTencentItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# pass
position_name = scrapy.Field()#职位名称
position_type = scrapy.Field()#职位类别
detail_url = scrapy.Field()
people_count = scrapy.Field()
work_city = scrapy.Field()
release_date = scrapy.Field()#发布时间
job_description = scrapy.Field()#工作描述
job_require = scrapy.Field()#工作要求
2、配置settings.py
配置mongo
NEWSPIDER_MODULE = 'hr_tencent.spiders'
MONGO_URL ='localhost'
MONGO_DB ='hrtencent'
切记注册ITEM_PIPELINES
ITEM_PIPELINES = { # 'hr_tencent.pipelines.HrTencentPipeline': 300, 'hr_tencent.pipelines.MongoPipeline': 400, }
3.到spider文件夹里面执行指令 scrapy genspider tencent
4、打开自动生成的tencent.py文件,进行编辑
# -*- coding: utf-8 -*-
import scrapy
from hr_tencent.items import HrTencentItem class TencentSpider(scrapy.Spider):
name = 'tencent'
allowed_domains = ['hr.tencent.com']
start_urls = ['https://hr.tencent.com/position.php']
front_url = "https://hr.tencent.com/"
def parse(self, response): tencenthr = response.xpath('//tr[@class="even"] | //tr[@class="odd"]')
for job in tencenthr:
item = HrTencentItem()
item["position_name"] = job.xpath('.//a/text()').extract_first()
item["detail_url"] = self.front_url + job.xpath('.//a/@href').extract_first()
item["position_type"] = job.xpath('.//td[2]/text()').extract_first()
item["people_count"] = job.xpath('.//td[3]/text()').extract_first()
item["work_city"] = job.xpath('.//td[4]/text()').extract_first()
item["release_date"] = job.xpath('.//td[5]/text()').extract_first()
yield scrapy.Request(url=item["detail_url"], callback=self.detail_parse, meta={"item": item})
next_url = self.front_url + response.xpath('//div[@class="pagenav"]/a[@id="next"]/@href').extract_first()
yield scrapy.Request(url=next_url, callback=self.parse) def detail_parse(self, response):
item = response.meta["item"]
node_list = response.xpath('//ul[@class="squareli"]')
item["job_description"] = ''.join(node_list[0].xpath("./li/text()").extract())
item["job_require"] = ''.join(node_list[1].xpath("./li/text()").extract())
yield item
5、配置pipelines.py文件
import pymongo class MongoPipeline(object):
def __init__(self,mongo_url,mongo_db):
self.mongo_url = mongo_url
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls,crawler):
return cls(
mongo_url = crawler.settings.get('MONGO_URL'),
mongo_db=crawler.settings.get('MONGO_DB') )
def open_spider(self,spider):
self.client = pymongo.MongoClient(self.mongo_url)
self.db = self.client[self.mongo_db] def process_item(self,item,spider):
name = item.__class__.__name__
self.db[name].insert(dict(item))
return item def close_spider(self,spider):
self.client.close()
6、新建一个run.py文件,为了不每次运行都敲指令,直接运行run.py即可
# -*- coding:utf-8 -*-
from scrapy import cmdline cmdline.execute("scrapy crawl tencent".split())
7、运行本地或服务器上的mongo数据库(远程mongo数据库地址需要自己配)
8、执行run文件数据到手

Scrapy:腾讯招聘整站数据爬取的更多相关文章
- quotes 整站数据爬取存mongo
安装完成scrapy后爬取部分信息已经不能满足躁动的心了,那么试试http://quotes.toscrape.com/整站数据爬取 第一部分 项目创建 1.进入到存储项目的文件夹,执行指令 scra ...
- scrapy框架基于CrawlSpider的全站数据爬取
引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...
- 爬虫第六篇:scrapy框架爬取某书网整站爬虫爬取
新建项目 # 新建项目$ scrapy startproject jianshu# 进入到文件夹 $ cd jainshu# 新建spider文件 $ scrapy genspider -t craw ...
- Python实现采集wordpress整站数据的爬虫
最近爱上了python,就非常喜欢使用python来练手,在上次的基础上完善一下代码,实现采集wordpress程序的网站的整站数据的爬虫程序,本站也是采用的wordpress,我就拿吾八哥网(htt ...
- Scrapy 框架 CrawlSpider 全站数据爬取
CrawlSpider 全站数据爬取 创建 crawlSpider 爬虫文件 scrapy genspider -t crawl chouti www.xxx.com import scrapy fr ...
- 移动端数据爬取和Scrapy框架
移动端数据爬取 注:抓包工具:青花瓷 1.配置fiddler 2.移动端安装fiddler证书 3.配置手机的网络 - 给手机设置一个代理IP:port a. Fiddler设置 打开Fiddler软 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- 一个免费ss网站的数据爬取过程
一个免费ss网站的数据爬取过程 Apr 14, 2019 引言 爬虫整体概况 主要功能方法 绕过DDOS保护(Cloudflare) post中参数a,b,c的解析 post中参数a,b,c的解析 p ...
- 爬虫1.5-ajax数据爬取
目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 ...
随机推荐
- Python基础(time模块,datetime模块)
#Author : Kelvin #Date : 2019/1/6 15:10 import time #获取此时的时间戳(从此刻到1970年一月一号零点的秒数) res1=time.time() p ...
- 【Python3爬虫】大众点评爬虫(破解CSS反爬)
本次爬虫的爬取目标是大众点评上的一些店铺的店铺名称.推荐菜和评分信息. 一.页面分析 进入大众点评,然后选择美食(http://www.dianping.com/wuhan/ch10),可以看到一页有 ...
- 用命令行撤销工作区的所有更改(修改文件&&新增文件)
话说起来之前放弃工作区所有的更改,我一直都是直接用VSCode在workingTree的按钮,如下: 直到有一天我感觉这样不够酷,于是我试了git reset --hard. 然并卵,这个命令虽然 ...
- Entity Framework 查漏补缺 (一)
明确EF建立的数据库和对象之间的关系 EF也是一种ORM技术框架, 将对象模型和关系型数据库的数据结构对应起来,开发人员不在利用sql去操作数据相关结构和数据.以下是EF建立的数据库和对象之间关系 关 ...
- Asp.Net.Identity认证不依赖Entity Framework实现方式
Asp.Net.Identity为何物请自行搜索,也可转向此文章http://www.cnblogs.com/shanyou/p/3918178.html 本来微软已经帮我们将授权.认证以及数据库存储 ...
- .Net Framework项目引用.NetStandard标准库出现版本冲突解决办法
今天在工作中出现一个引用问题,害我找问题找了很久.起因是在一个Winform项目下需要引用一个.NetStandard标准库,标准库引用了System.ComponentModel.Annotatio ...
- c++随机排序容器中的元素
在各种程序语言中都提供了将容器元素随机排序的shuffle方法,c++也不例外. 不过c++将shuffle放在了<algorithm>中而不是像其他语言一样在random里,同时c++1 ...
- GOF23种设计模式概括
GOF23种设计模式分为三种: 创建型模式[工厂方法模式]结构型模式[(类)适配器模式]行为型模式[ 解释器模式,模板方法模式] 创建型模式Creational Patterns抽象工厂模式abs ...
- C# 提前异步加载数据
前言 在我们应用程序中,如果有较大的数据需要从数据库或者本地读取,且是一次性的话,可以提前获取数据并缓存在内存中. 一般处理方法:利用应用程序启动到用户使用功能这一段时间,提前加载数据. 问题来了,因 ...
- C# 创建、更改Excel命名区域(NamedRange)
创建命名区域是指给选定的某个单元格或多个单元格区域设置名称,目的是方便我们在文件中的其他地方对该单元格区域进行引用能够简化公式引用或者方便数据管理.下面记录了具体的C#示例代码.这里创建命名区域分为了 ...