php 爬虫_Scrapy 爬虫完整案例-基础篇

1 Scrapy 爬虫完整案例-基础篇

1.1 Scrapy 爬虫案例一

Scrapy 爬虫案例:爬取腾讯网招聘信息

案例步骤:

第一步:创建项目。

在 dos下切换到目录

D:爬虫_scriptscrapy_project

a630e9ac618b6833bb75eb774831ad5d.png

新建一个新的爬虫项目:scrapy startproject tencent

8f3aabaf7c2d2db9abfc2e13a88abb57.png
7ce8d8fd7ec4f25812897aeba3de270b.png
f313e831469338c6032a351a249ca108.png

第二步:编写 items.py 文件,设置好需要保存的数据字段。

import scrapy

class TencentItem(scrapy.Item):

# 职位名

positionname = scrapy.Field()

# 详情连接

positionlink = scrapy.Field()

# 职位类别

positionType = scrapy.Field()

# 招聘人数

peopleNum = scrapy.Field()

# 工作地点

workLocation = scrapy.Field()

# 发布时间

publishTime = scrapy.Field()

65059af3531d6bd0e4aacb02936b48bd.png

第三步:创建爬虫。

在 dos下切换到目录

D:爬虫_scriptscrapy_projectencentencentspiders

用命令 scrapy genspider tencents "tencent.com" 创建爬虫。

3108b2cafefe58b74074b36ac6a0ca9f.png
1e81d5401190c5ef68a40d81990e93da.png

备注:因为用命令创建的时候,爬虫名称不能和域名tencent.com 一样,所以创建的时候,爬虫名为:tencents,创建完之后,可以把爬虫名修改成 tencent。

第四步:编写爬虫文件。

1e2a40f215314274449f933d6a6d0f3b.png

从图片中看到tencent招聘信息有339页。

第一页的链接地址:

https://hr.tencent.com/position.php?&start=0

第二页的链接地址:

https://hr.tencent.com/position.php?&start=10

最后一页的链接地址:

https://hr.tencent.com/position.php?&start=3380

通过分析我们得知,每一页的的链接地址start的值递增10,就是下一页的地址。

ec593abd715623e61868d479e8e0bca7.png

通过对页面的分析,得出需要保存的数据字段在页面上的位置。

info= response.xpath("//tr[@class='even'] | //tr[@class='odd']")

each in info

# 职位名

item['positionname'] = each.xpath("./td[1]/a/text()").extract()[0]

# 详情连接

item['positionlink'] = each.xpath("./td[1]/a/@href").extract()[0]

# 职位类别

item['positionType'] = each.xpath("./td[2]/text()").extract()[0]

# 招聘人数

item['peopleNum'] = each.xpath("./td[3]/text()").extract()[0]

# 工作地点

item['workLocation'] = each.xpath("./td[4]/text()").extract()[0]

# 发布时间

item['publishTime'] = each.xpath("./td[5]/text()").extract()[0]

编写完整的爬虫文件。

import scrapy,sys,os

path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

#print(path)

sys.path.append(path)

from tencent.items import TencentItem

class TencentpositionSpider(scrapy.Spider):

name = "tencent"

allowed_domains = ["tencent.com"]

url = "http://hr.tencent.com/position.php?&start="

offset = 0

start_urls = [url + str(offset)]

def parse(self, response):

info= response.xpath("//tr[@class='even'] | //tr[@class='odd']")

for each in info:

# 初始化模型对象

item = TencentItem()

item['positionname'] = each.xpath("./td[1]/a/text()").extract()[0]

# 详情连接

item['positionlink'] = each.xpath("./td[1]/a/@href").extract()[0]

# 职位类别

item['positionType'] = each.xpath("./td[2]/text()").extract()[0]

# 招聘人数

item['peopleNum'] = each.xpath("./td[3]/text()").extract()[0]

# 工作地点

item['workLocation'] = each.xpath("./td[4]/text()").extract()[0]

# 发布时间

item['publishTime'] = each.xpath("./td[5]/text()").extract()[0]

#将获取的数据交给管道文件 pipelines ,yield的作用是把一个函数当成一个生成器,程序每次执行到yield时,返回一个值,程序会先暂停,下次调用再返回一个值,程序会接着暂停....

yield item

if self.offset < 3390:

self.offset += 10

# 每次处理完一页的数据之后,重新发送下一页页面请求

# self.offset自增10,同时拼接为新的 url,并调用回调函数 self.parse 处理 Response

yield scrapy.Request(self.url + str(self.offset), callback = self.parse)

第五步:编写管道文件:TencentPipeline

import json

class TencentPipeline(object):

# __init__方法是可选的,做为类的初始化方法

def __init__(self):

# 创建了一个 tencent.json 文件,用来保存数据

self.filename = open("tencent.json

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值