亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python爬蟲框架Scrapy實戰之批量抓取招聘信息

2020-01-04 17:59:14
字體:
來源:轉載
供稿:網友
網絡爬蟲又被稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者,是按照一定的規則,自動抓取萬維網信息的程序或者腳本。這篇文章主要介紹Python爬蟲框架Scrapy實戰之批量抓取招聘信息,有需要的朋友可以參考下
 

網絡爬蟲抓取特定網站網頁的html數據,但是一個網站有上千上萬條數據,我們不可能知道網站網頁的url地址,所以,要有個技巧去抓取網站的所有html頁面。Scrapy是純Python實現的爬蟲框架,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常之方便~

   Scrapy 使用wisted這個異步網絡庫來處理網絡通訊,架構清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。整體架構如下圖所示:

Python爬蟲框架Scrapy實戰之批量抓取招聘信息

    綠線是數據流向,首先從初始URL 開始,Scheduler 會將其交給 Downloader 進行下載,下載之后會交給 Spider 進行分析,Spider分析出來的結果有兩種:一種是需要進一步抓取的鏈接,例如之前分析的“下一頁”的鏈接,這些東西會被傳回 Scheduler ;另一種是需要保存的數據,它們則被送到Item Pipeline 那里,那是對數據進行后期處理(詳細分析、過濾、存儲等)的地方。另外,在數據流動的通道里還可以安裝各種中間件,進行必要的處理。

我假定你已經安裝了Scrapy。假如你沒有安裝,你可以參考這篇文章。

在本文中,我們將學會如何使用Scrapy建立一個爬蟲程序,并爬取指定網站上的內容

1. 創建一個新的Scrapy Project
2. 定義你需要從網頁中提取的元素Item
3.實現一個Spider類,通過接口完成爬取URL和提取Item的功能
4. 實現一個Item PipeLine類,完成Item的存儲功能

我將會用騰訊招聘官網作為例子。
Github源碼:https://github.com/maxliaops/scrapy-itzhaopin

Python爬蟲框架Scrapy實戰之批量抓取招聘信息

目標:抓取騰訊招聘官網職位招聘信息并保存為JSON格式。

新建工程

首先,為我們的爬蟲新建一個工程,首先進入一個目錄(任意一個我們用來保存代碼的目錄),執行:

 

復制代碼代碼如下:

scrapy startprojectitzhaopin

 

最后的itzhaopin就是項目名稱。這個命令會在當前目錄下創建一個新目錄itzhaopin,結構如下:

├── itzhaopin
│   ├── itzhaopin
│   │   ├── __init__.py
│   │   ├── items.py
│   │   ├── pipelines.py
│   │   ├── settings.py
│   │   └── spiders
│   │      └── __init__.py
│   └── scrapy.cfg

scrapy.cfg: 項目配置文件
items.py: 需要提取的數據結構定義文件
pipelines.py:管道定義,用來對items里面提取的數據做進一步處理,如保存等
settings.py: 爬蟲配置文件
spiders: 放置spider的目錄

定義Item

在items.py里面定義我們要抓取的數據:

 

復制代碼代碼如下:

from scrapy.item import Item, Field  
class TencentItem(Item):  
    name = Field()                # 職位名稱  
    catalog = Field()             # 職位類別  
    workLocation = Field()        # 工作地點  
    recruitNumber = Field()       # 招聘人數  
    detailLink = Field()          # 職位詳情頁鏈接  
    publishTime = Field()         # 發布時間  

 

實現Spider

Spider是一個繼承自scrapy.contrib.spiders.CrawlSpider的Python類,有三個必需的定義的成員

name: 名字,這個spider的標識

start_urls:一個url列表,spider從這些網頁開始抓取

parse():一個方法,當start_urls里面的網頁抓取下來之后需要調用這個方法解析網頁內容,同時需要返回下一個需要抓取的網頁,或者返回items列表

所以在spiders目錄下新建一個spider,tencent_spider.py:

 

復制代碼代碼如下:

import re  
import json  
from scrapy.selector import Selector  
try:  
    from scrapy.spider import Spider  
except:  
    from scrapy.spider import BaseSpider as Spider  
from scrapy.utils.response import get_base_url  
from scrapy.utils.url import urljoin_rfc  
from scrapy.contrib.spiders import CrawlSpider, Rule  
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor as sle  
from itzhaopin.items import *  
from itzhaopin.misc.log import *  
class TencentSpider(CrawlSpider):  
    name = "tencent"  
    allowed_domains = ["tencent.com"]  
    start_urls = [  
        "http://hr.tencent.com/position.php"  
    ]  
    rules = [ # 定義爬取URL的規則  
        Rule(sle(allow=("/position.php/?&start=/d{,4}#a")), follow=True, callback='parse_item')  
    ]  
    def parse_item(self, response): # 提取數據到Items里面,主要用到XPath和CSS選擇器提取網頁數據  
        items = []  
        sel = Selector(response)  
        base_url = get_base_url(response)  
        sites_even = sel.css('table.tablelist tr.even')  
        for site in sites_even:  
            item = TencentItem()  
            item['name'] = site.css('.l.square a').xpath('text()').extract()  
            relative_url = site.css('.l.square a').xpath('@href').extract()[0]  
            item['detailLink'] = urljoin_rfc(base_url, relative_url)  
            item['catalog'] = site.css('tr > td:nth-child(2)::text').extract()  
            item['workLocation'] = site.css('tr > td:nth-child(4)::text').extract()  
            item['recruitNumber'] = site.css('tr > td:nth-child(3)::text').extract()  
            item['publishTime'] = site.css('tr > td:nth-child(5)::text').extract()  
            items.append(item)  
            #print repr(item).decode("unicode-escape") + '/n'  
        sites_odd = sel.css('table.tablelist tr.odd')  
        for site in sites_odd:  
            item = TencentItem()  
            item['name'] = site.css('.l.square a').xpath('text()').extract()  
            relative_url = site.css('.l.square a').xpath('@href').extract()[0]  
            item['detailLink'] = urljoin_rfc(base_url, relative_url)  
            item['catalog'] = site.css('tr > td:nth-child(2)::text').extract()  
            item['workLocation'] = site.css('tr > td:nth-child(4)::text').extract()  
            item['recruitNumber'] = site.css('tr > td:nth-child(3)::text').extract()  
            item['publishTime'] = site.css('tr > td:nth-child(5)::text').extract()  
            items.append(item)  
            #print repr(item).decode("unicode-escape") + '/n'  
        info('parsed ' + str(response))  
        return items  
    def _process_request(self, request):  
        info('process ' + str(request))  
        return request  

 

實現PipeLine

PipeLine用來對Spider返回的Item列表進行保存操作,可以寫入到文件、或者數據庫等。

PipeLine只有一個需要實現的方法:process_item,例如我們將Item保存到JSON格式文件中:

pipelines.py

 

復制代碼代碼如下:

from scrapy import signals  
import json  
import codecs  
class JsonWithEncodingTencentPipeline(object):  
    def __init__(self):  
        self.file = codecs.open('tencent.json', 'w', encoding='utf-8')  
    def process_item(self, item, spider):  
        line = json.dumps(dict(item), ensure_ascii=False) + "/n"  
        self.file.write(line)  
        return item  
    def spider_closed(self, spider):  
        self.file.close(  
)  

 

到現在,我們就完成了一個基本的爬蟲的實現,可以輸入下面的命令來啟動這個Spider

scrapy crawl tencent

爬蟲運行結束后,在當前目錄下將會生成一個名為tencent.json的文件,其中以JSON格式保存了職位招聘信息。
部分內容如下:

{"recruitNumber": ["1"], "name": ["SD5-資深手游策劃(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15626&keywords=&tid=0&lid=0", "publishTime":
["2014-04-25"], "catalog": ["產品/項目類"], "workLocation": ["深圳"]}

{"recruitNumber": ["1"], "name": ["TEG13-后臺開發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15666&keywords=&tid=0&lid=0", 
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["2"], "name": ["TEG12-數據中心高級經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15698&keywords=&tid=0&lid=0", 
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["1"], "name": ["GY1-微信支付品牌策劃經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15710&keywords=&tid=0&lid=0", 
"publishTime": ["2014-04-25"], "catalog": ["市場類"], "workLocation": ["深圳"]}

{"recruitNumber": ["2"], "name": ["SNG06-后臺開發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15499&keywords=&tid=0&lid=0",
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["2"], "name": ["OMG01-騰訊時尚視頻策劃編輯(北京)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15694&keywords=&tid=0&lid=0", 
"publishTime": ["2014-04-25"], "catalog": ["內容編輯類"], "workLocation": ["北京"]}

{"recruitNumber": ["1"], "name": ["HY08-QT客戶端Windows開發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=11378&keywords=&tid=0&lid=0", 
"publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["5"], "name": ["HY1-移動游戲測試經理(上海)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15607&keywords=&tid=0&lid=0", "publishTime": ["2014-04-25"], "catalog": ["技術類"], "workLocation": ["上海"]}

{"recruitNumber": ["1"], "name": ["HY6-網吧平臺高級產品經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=10974&keywords=&tid=0&lid=0", "publishTime": ["2014-04-25"], "catalog": ["產品/項目類"], "workLocation": ["深圳"]}

{"recruitNumber": ["4"], "name": ["TEG14-云存儲研發工程師(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=15168&keywords=&tid=0&lid=0", "publishTime": ["2014-04-24"], "catalog": ["技術類"], "workLocation": ["深圳"]}

{"recruitNumber": ["1"], "name": ["CB-薪酬經理(深圳)"], "detailLink": "http://hr.tencent.com/position_detail.php?id=2309&keywords=&tid=0&lid=0", "publishTime": ["2013-11-28"], "catalog": ["職能類"], "workLocation": ["深圳"]}

以上全部內容就是通過Python爬蟲框架Scrapy實戰之批量抓取招聘信息的全部內容,希望對大家有所幫助,欲了解更多編程知識,請鎖定我們的網站,每天都有新的內容發布。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近中文字幕mv在线一区二区三区四区| 久久亚洲成人精品| 日本不卡免费高清视频| 在线观看91久久久久久| 在线中文字幕日韩| 久久九九国产精品怡红院| 亚洲精品电影久久久| 孩xxxx性bbbb欧美| 超碰精品一区二区三区乱码| 91欧美精品成人综合在线观看| 伊人久久综合97精品| 久久亚洲电影天堂| 国产精品视频久久久久| 九九热在线精品视频| 久久久久久有精品国产| 亚洲一区av在线播放| 91精品在线播放| 国产精品视频yy9099| 清纯唯美亚洲激情| 色先锋资源久久综合5566| 亚洲美女又黄又爽在线观看| 国产男女猛烈无遮挡91| 国产精品成人一区| 亚洲视频在线免费看| 久久综合色88| 亚洲综合中文字幕在线| 国产精品久久久av久久久| 一区二区亚洲欧洲国产日韩| 成人国内精品久久久久一区| 精品久久久久久久久久久久久| 久久国产色av| 欧美国产第二页| 久久乐国产精品| 欧美一级高清免费| 欧美高清不卡在线| 色伦专区97中文字幕| 亚洲奶大毛多的老太婆| 亚洲欧美日韩天堂一区二区| 亚洲日韩中文字幕| 日本成人在线视频网址| 美女视频黄免费的亚洲男人天堂| 欧美日本黄视频| 国产69精品99久久久久久宅男| 日韩高清中文字幕| 欧美久久久精品| 777精品视频| 久久久www成人免费精品| 国产精品99久久久久久www| 26uuu另类亚洲欧美日本一| 亚洲国产精品久久久| 亚洲精品视频在线播放| 欧美成年人视频网站| 国产精品v片在线观看不卡| 深夜福利亚洲导航| 国产成人综合精品在线| 自拍偷拍亚洲精品| 欧美日韩国产精品一区| 久久久精品美女| 欧美色videos| 久久精品国产69国产精品亚洲| 国产精品网红福利| 欧美激情在线一区| 欧美视频在线观看 亚洲欧| 中文字幕日韩av综合精品| 亚洲天堂av女优| 国产精品jizz在线观看麻豆| 国产在线观看91精品一区| 国产精品香蕉国产| 国产精品高清免费在线观看| 欧美色欧美亚洲高清在线视频| 欧美小视频在线观看| 国产精品久久久久久网站| 91国产精品91| 中文字幕av日韩| 在线播放日韩精品| 国产一级揄自揄精品视频| 中文字幕亚洲国产| 亚洲精品短视频| 中文字幕亚洲无线码在线一区| 亚洲欧洲在线免费| 国a精品视频大全| 91九色视频导航| 久久精品国产99国产精品澳门| www.99久久热国产日韩欧美.com| 欧美高清激情视频| 久久精品国产欧美亚洲人人爽| 欧美成人性生活| 一区二区亚洲精品国产| 色一情一乱一区二区| 日韩免费精品视频| 欧洲成人在线观看| 欧美精品日韩三级| 日韩中文字幕第一页| 欧美性生活大片免费观看网址| 91精品久久久久久久久青青| 亚洲精品久久久久国产| 亚洲精品福利在线| 欧美三级免费观看| 国产精品福利无圣光在线一区| 欧美肥臀大乳一区二区免费视频| 97欧美精品一区二区三区| 日本不卡视频在线播放| 欧美激情久久久久久| 国产视频在线观看一区二区| 欧美黑人狂野猛交老妇| 狠狠躁18三区二区一区| 91日本在线观看| 高清欧美性猛交| 91在线免费网站| 日韩av观看网址| 亚洲最大激情中文字幕| 亚洲аv电影天堂网| 亚洲国产天堂久久综合| 欧美性猛交xxxx免费看久久久| 国产伦精品免费视频| 91国产中文字幕| 亚洲一区二区精品| 色婷婷综合成人av| 九九精品视频在线| 亚洲视频axxx| 国产精品扒开腿爽爽爽视频| 午夜精品久久久久久久久久久久| 日韩电影大片中文字幕| 97精品视频在线观看| 亚洲天堂av图片| 丝袜一区二区三区| 国产va免费精品高清在线观看| 亚洲欧美在线播放| 久久99青青精品免费观看| 欧美日韩国产二区| 午夜欧美不卡精品aaaaa| 国产免费一区视频观看免费| 91国内揄拍国内精品对白| 狠狠做深爱婷婷久久综合一区| 日韩高清免费在线| 久久成人免费视频| 不卡伊人av在线播放| 亚洲欧美国产va在线影院| 久久99精品视频一区97| 欧美日韩色婷婷| 久久免费精品日本久久中文字幕| 精品久久久国产| 国产精品免费在线免费| 欧洲成人在线观看| 欧美性xxxx在线播放| 91精品国产免费久久久久久| 亚洲欧美一区二区三区情侣bbw| 亚洲视频欧美视频| 中文字幕日韩精品有码视频| 久热精品视频在线| 中文字幕最新精品| 国产丝袜一区二区三区免费视频| 国产精品狼人色视频一区| 琪琪亚洲精品午夜在线| 九色成人免费视频| 亚洲精品自产拍| 精品国产自在精品国产浪潮| 6080yy精品一区二区三区| 欧美日韩国产在线看| 欧美乱妇40p| 国产精品入口尤物| 亚洲精品久久久久久下一站| 精品亚洲一区二区三区| 亚洲欧美变态国产另类|