1 Scrapy 爬虫完整案例-基础篇1.1 Scrapy 爬虫案例一
Scrapy 爬虫案例:爬取腾讯网招聘信息
案例步骤:
第一步:创建项目 。
在 dos下切换到目录
D:爬虫_scriptscrapy_project
文章插图
新建一个新的爬虫项目:scrapy startproject tencent
文章插图
文章插图
文章插图
第二步:编写 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()
文章插图
第三步:创建爬虫 。
在 dos下切换到目录
D:爬虫_scriptscrapy_projecttencenttencentspiders
用命令 scrapy genspider tencents "tencent.com" 创建爬虫 。
文章插图
文章插图
备注:因为用命令创建的时候 , 爬虫名称不能和域名tencent.com 一样 , 所以创建的时候 , 爬虫名为:tencents,创建完之后 , 可以把爬虫名修改成 tencent 。
第四步:编写爬虫文件 。
文章插图
从图片中看到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 , 就是下一页的地址 。
文章插图
通过对页面的分析 , 得出需要保存的数据字段在页面上的位置 。
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时 , 返回一个值 , 程序会先暂停 , 下次调用再返回一个值 , 程序会接着暂停....
推荐阅读
- 七种颜色搭配方案,养生茶营销策划方案完整版
- Python爬虫练习:爬取800多所大学学校排名、星级等
- 麻将多少张?
- 大蛇2电影国语完整版免费观看 大蛇2免费完整版在线西瓜
- 7500航班真实情况 7500鬼航班完整版
- Python爬虫案例,腾讯动漫爬虫,步骤超详细解释,源码分析
- 书中自有黄金屋完整诗句?书中自有黄金屋的下一句是什么_1
- 四种Python爬虫常用的定位元素方法对比,你偏爱哪一款?
- Pyppeteer爬虫神器详解
- 破了这几种爬虫加密算法后,我的路更近了「JS逆向3」