scrapy 爬取腾讯招聘几千条数据

6 篇文章 0 订阅
3 篇文章 0 订阅

1.先通过 scrapy startproject mytencent 命令创建一个爬虫文件
2.再通过scrapy genspider tencent www.hr.tencent.com 创建一个蜘蛛
3.查看原网页分析数据,通过xpath选择要爬取的数据,然后再item.py文件中添加需要保存的数据列名

positionName = scrapy.Field()#职位名称
positionLink = scrapy.Field()#职位详情链接
positiontype = scrapy.Field()#职位类别
peoplenumber = scrapy.Field()#招聘人数
workLocation = scrapy.Field()#工作地点
publishtime = scrapy.Field()#发布时间

4.编写蜘蛛代码,此时蜘蛛,明大致框架已做好,只需要填写start_urls即可,由于需要爬取多个页面上数据,所以爬取网页采取字符串拼接,baseurl="https://hr.tencent.com/position.php?/&start=0";
startnumber = 0
baseNumber = 0
start_urls = [baseurl + str(startnumber)]

5.通过xpath选择内容,同时也要引用管道

 def parse(self, response):
        result=response.xpath("//tr[@class='even'] | //tr[@class='odd']");
        item =MyquanshuwangItem()
        for node in result:
           item["positionName"] = node.xpath("./td[1]/a/text()").extract()[0]#职位名称
           item["positionLink"] = node.xpath("./td[1]/a/@href").extract()[0]#职位详情链接
           item["positiontype"] = node.xpath("./td[2]/text()").extract()[0]#职位类别
           item["peoplenumber"] = node.xpath("./td[3]/text()").extract()[0]#招聘人数
           item["workLocation"] = node.xpath("./td[4]/text()").extract()[0]#工作地点
           item["publishtime"] = node.xpath("./td[5]/text()").extract()[0]#发布时间
           yield item

6.因此需要通过setting文件打开管道:ITEM_PIPELINES = {
'mytencent.pipelines.mytencentPipeline': 300,
}

7.在管道文件中,在管道中保存数据
`import json

class MyquanshuwangPipeline(object):
def init(self):
self.f=open(“tencent.csv”,”w”)
def process_item(self, item, spider):
content = json.dumps(dict(item),ensure_ascii=False)+”,\n”
self.f.write(content)
return item
def close_spider(self,spider):
self.f.close()`
8.因为要爬取所有数据,因此需要再回调一下parse函数

if self.startnumber < 3070:
            self.startnumber += 10;
            # self.startnumber =
            url = self.baseurl +  str(self.startnumber);
            yield scrapy.Request(url,callback=self.parse)

因为我爬取时候一共3070条数据,所以就把范围定义为3070
还有另一种写法就是根据下一页按钮去爬取,那样的话就不必定义长度了
最开始请求出来的URL时list类型,需要提取一下这个元素所以取第一个元素

if len(response.xpath("//a[@id='next']/@href")):
            url=response.xpath("//a[@id='next']/@href").extract();
            # print(url[0])
            # print(type(url))
            yield scrapy.Request("https://hr.tencent.com/"+url[0],callback=self.parse)

注:代码可能还有瑕疵之处,敬请谅解,仅供参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值