国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python爬蟲框架Scrapy實例代碼

2020-01-04 15:46:35
字體:
來源:轉載
供稿:網友

目標任務:爬取騰訊社招信息,需要爬取的內容為:職位名稱,職位的詳情鏈接,職位類別,招聘人數,工作地點,發布時間。

一、創建Scrapy項目

scrapy startproject Tencent

命令執行后,會創建一個Tencent文件夾,結構如下

二、編寫item文件,根據需要爬取的內容定義爬取字段

# -*- coding: utf-8 -*-import scrapyclass TencentItem(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為爬蟲作用范圍scrapy genspider tencentPostion "tencent.com"

執行命令后會在spiders文件夾中創建一個tencentPostion.py的文件,現在開始對其編寫:

# -*- coding: utf-8 -*-import scrapyfrom tencent.items import TencentItemclass TencentpositionSpider(scrapy.Spider):  """  功能:爬取騰訊社招信息  """  # 爬蟲名  name = "tencentPosition"  # 爬蟲作用范圍  allowed_domains = ["tencent.com"]  url = "http://hr.tencent.com/position.php?&start="  offset = 0  # 起始url  start_urls = [url + str(offset)]  def parse(self, response):    for each in response.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]      yield item    if self.offset < 1680:      self.offset += 10    # 每次處理完一頁的數據之后,重新發送下一頁頁面請求    # self.offset自增10,同時拼接為新的url,并調用回調函數self.parse處理Response    yield scrapy.Request(self.url + str(self.offset), callback = self.parse)

四、編寫pipelines文件

# -*- coding: utf-8 -*-import jsonclass TencentPipeline(object):  """     功能:保存item數據   """  def __init__(self):    self.filename = open("tencent.json", "w")  def process_item(self, item, spider):    text = json.dumps(dict(item), ensure_ascii = False) + ",/n"    self.filename.write(text.encode("utf-8"))    return item  def close_spider(self, spider):    self.filename.close()

五、settings文件設置(主要設置內容)

# 設置請求頭部,添加urlDEFAULT_REQUEST_HEADERS = {  "User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'}# 設置item——pipelinesITEM_PIPELINES = {  'tencent.pipelines.TencentPipeline': 300,}

執行命令,運行程序

# tencentPosition為爬蟲名scrapy crwal tencentPosition

使用CrawlSpider類改寫

# 創建項目scrapy startproject TencentSpider# 進入項目目錄下,創建爬蟲文件scrapy genspider -t crawl tencent tencent.comitem等文件寫法不變,主要是爬蟲文件的編寫# -*- coding:utf-8 -*-import scrapy# 導入CrawlSpider類和Rulefrom scrapy.spiders import CrawlSpider, Rule# 導入鏈接規則匹配類,用來提取符合規則的連接from scrapy.linkextractors import LinkExtractorfrom TencentSpider.items import TencentItemclass TencentSpider(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)  ]  # 指定的回調函數  def parseTencent(self, response):    for each in response.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]      yield item

總結

以上所述是小編給大家介紹的Python爬蟲框架Scrapy實例代碼,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陇西县| 腾冲县| 调兵山市| 武城县| 平潭县| 莱州市| 沁水县| 东兰县| 永济市| 左云县| 山东省| 龙井市| 通江县| 会理县| 红原县| 淮南市| 阿瓦提县| 长阳| 义马市| 义乌市| 定兴县| 襄城县| 重庆市| 德州市| 合山市| 伊吾县| 大邑县| 湄潭县| 仪陇县| 邛崃市| 夏邑县| 讷河市| 汶川县| 白朗县| 卢龙县| 澜沧| 红桥区| 内黄县| 西安市| 凉城县| 平阳县|