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

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)

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

猜你喜欢

转载自blog.csdn.net/liuzemeeting/article/details/79234745