Python爬虫框架Scrapy实例代码
目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间。
一、创建Scrapy项目
scrapystartprojectTencent
命令执行后,会创建一个Tencent文件夹,结构如下
二、编写item文件,根据需要爬取的内容定义爬取字段
#-*-coding:utf-8-*- importscrapy classTencentItem(scrapy.Item): #职位名 positionname=scrapy.Field() #详情连接 positionlink=scrapy.Field() #职位类别 positionType=scrapy.Field() #招聘人数 peopleNum=scrapy.Field() #工作地点 workLocation=scrapy.Field() #发布时间 publishTime=scrapy.Field()
三、编写spider文件
进入Tencent目录,使用命令创建一个基础爬虫类:
#tencentPostion为爬虫名,tencent.com为爬虫作用范围 scrapygenspidertencentPostion"tencent.com"
执行命令后会在spiders文件夹中创建一个tencentPostion.py的文件,现在开始对其编写:
#-*-coding:utf-8-*-
importscrapy
fromtencent.itemsimportTencentItem
classTencentpositionSpider(scrapy.Spider):
"""
功能:爬取腾讯社招信息
"""
#爬虫名
name="tencentPosition"
#爬虫作用范围
allowed_domains=["tencent.com"]
url="http://hr.tencent.com/position.php?&start="
offset=0
#起始url
start_urls=[url+str(offset)]
defparse(self,response):
foreachinresponse.xpath("//tr[@class='even']|//tr[@class='odd']"):
#初始化模型对象
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]
yielditem
ifself.offset<1680:
self.offset+=10
#每次处理完一页的数据之后,重新发送下一页页面请求
#self.offset自增10,同时拼接为新的url,并调用回调函数self.parse处理Response
yieldscrapy.Request(self.url+str(self.offset),callback=self.parse)
四、编写pipelines文件
#-*-coding:utf-8-*-
importjson
classTencentPipeline(object):
"""
功能:保存item数据
"""
def__init__(self):
self.filename=open("tencent.json","w")
defprocess_item(self,item,spider):
text=json.dumps(dict(item),ensure_ascii=False)+",\n"
self.filename.write(text.encode("utf-8"))
returnitem
defclose_spider(self,spider):
self.filename.close()
五、settings文件设置(主要设置内容)
#设置请求头部,添加url
DEFAULT_REQUEST_HEADERS={
"User-Agent":"Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;",
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
#设置item——pipelines
ITEM_PIPELINES={
'tencent.pipelines.TencentPipeline':300,
}
执行命令,运行程序
#tencentPosition为爬虫名 scrapycrwaltencentPosition
使用CrawlSpider类改写
#创建项目
scrapystartprojectTencentSpider
#进入项目目录下,创建爬虫文件
scrapygenspider-tcrawltencenttencent.com
item等文件写法不变,主要是爬虫文件的编写
#-*-coding:utf-8-*-
importscrapy
#导入CrawlSpider类和Rule
fromscrapy.spidersimportCrawlSpider,Rule
#导入链接规则匹配类,用来提取符合规则的连接
fromscrapy.linkextractorsimportLinkExtractor
fromTencentSpider.itemsimportTencentItem
classTencentSpider(CrawlSpider):
name="tencent"
allow_domains=["hr.tencent.com"]
start_urls=["http://hr.tencent.com/position.php?&start=0#a"]
#Response里链接的提取规则,返回的符合匹配规则的链接匹配对象的列表
pagelink=LinkExtractor(allow=("start=\d+"))
rules=[
#获取这个列表里的链接,依次发送请求,并且继续跟进,调用指定回调函数处理
Rule(pagelink,callback="parseTencent",follow=True)
]
#指定的回调函数
defparseTencent(self,response):
foreachinresponse.xpath("//tr[@class='even']|//tr[@class='odd']"):
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]
yielditem
总结
以上所述是小编给大家介绍的Python爬虫框架Scrapy实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!