python爬蟲——拉鉤網(wǎng)職位(scrapy)

<strong>上一篇python爬蟲——拉鉤網(wǎng)職位信息文章中提到要用scrapy框架去完成這個工作,現(xiàn)在已基本完成院塞,自己可以添加更多職位和城市瓜客。
思路和上一篇文章用requests+beautifulsoup一樣,不同的是上一次寫的是csv格式文件驯遇,這次存入mysql數(shù)據(jù)庫,廢話不多說直接上代碼</strong>

1.items.py

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class LagouzpItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    city = scrapy.Field()
    company_name = scrapy.Field()
    size = scrapy.Field()
    edu = scrapy.Field()
    financeStage = scrapy.Field()
    firstType = scrapy.Field()
    industryField = scrapy.Field()
    name = scrapy.Field()
    salary = scrapy.Field()
    secondType = scrapy.Field()
    workYear = scrapy.Field()
    time = scrapy.Field()

2.pipeline.py

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import MySQLdb
import csv

class LagouzpPipeline(object):
    #寫文件
    # def __init__(self):
    #     with open("data.csv", "ab+") as self.files:
    #         self.write = csv.writer(self.files)
    #         self.write.writerow(
    #             ['職位名稱', '公司名稱', '城市', '公司規(guī)模', '公司類型', '月薪', '行業(yè)領(lǐng)域', 'firstType', 'senondType', '工作經(jīng)歷', '學(xué)歷', '發(fā)布時間'])
    #
    # def process_item(self, item, spider):
    #     with open("data.csv", "ab+") as self.files:
    #         self.write = csv.writer(self.files)
    #         self.line = [item['name'], item['city'], item['company_name'], item['size'], item['financeStage'],item['salary'], item['industryField'], item['firstType'],item['secondType'],item['workYear'],item['edu'],item['time']]
    #         self.write.writerow(self.line)
    #     return item
    #數(shù)據(jù)庫
    def __init__(self):
        self.conn = MySQLdb.connect(user='root', passwd='123456', db='lagou', host='localhost', charset='utf8',
                                    use_unicode=True)
        self.cursor = self.conn.cursor()

    def process_item(self, item, spider):
        self.cursor.execute(
            "insert into jobinfo(name,city,company,size,type,salary,field,firsttype,secondtype,workyear,edu,time) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(item['name'], item['city'], item['company_name'], item['size'], item['financeStage'],item['salary'], item['industryField'], item['firstType'],item['secondType'],item['workYear'],item['edu'],item['time'],))
        self.conn.commit()
        return item


<em>這里分別提到了文件的操作和數(shù)據(jù)庫的操作方式蓄髓,可以參考一下
</em>

3.lg_spider.py

# -*- coding:utf-8 -*-
import scrapy
from ..items import LagouzpItem
import requests
from bs4 import BeautifulSoup
import json

class Spider(scrapy.Spider):
    name = 'lagou'
    cookies = {
        'user_trace_token': '20170314211704-f55f18938db84cfeae95d1efec6d585e',
        'LGUID': '20170314211706-859943f0-08b8-11e7-93e0-5254005c3644',
        'JSESSIONID': 'AA1DE67564F4C20F86F89F3572B706A1',
        'PRE_UTM': '',
        'PRE_HOST': 'www.baidu.com',
        'PRE_SITE': 'https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DuQkzN6ld65B8UHLJeaN2RVwWb3jiAl6AkSQSZRkXpRC%26wd%3D%26eqid%3Df6aa96cc0000dd5e0000000258ff3f34',
        'PRE_LAND': 'https%3A%2F%2Fwww.lagou.com%2F',
        'index_location_city': '%E5%85%A8%E5%9B%BD',
        'Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6': '1491116405,1491116452,1493122880,1493122898',
        'Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6': '1493123186',
        '_ga': 'GA1.2.1412866745.1489497427',
        'LGSID': '20170425202132-b7ea71dc-29b1-11e7-bc70-525400f775ce',
        'LGRID': '20170425202620-6394f6bd-29b2-11e7-bc72-525400f775ce',
        'TG-TRACK-CODE': 'search_code',
        'SEARCH_ID': '63e7755cfbbf40559a5dac6a35e5f49f'
    }
    headers = {
        "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}
    def start_requests(self):
        kd = ['python工程師', 'python數(shù)據(jù)分析']
        city = ['北京', '上海', '深圳', '廣州', '杭州', '成都', '南京', '武漢', '西安', '廈門', '長沙', '蘇州', '天津']
        urls_kd = ['https://www.lagou.com/jobs/list_{}?px=default&city='.format(one) for one in kd]
        for urls in urls_kd:
            urls_city = [urls + one for one in city]
            for url in urls_city:
                response = requests.get(url, headers=self.headers, cookies=self.cookies)
                location = url.split('&')[-1].split('=')[1]
                key = url.split('/')[-1].split('?')[0].split('_')[1]
                soup = BeautifulSoup(response.text, 'lxml')
                pages = soup.find('span', {'class': 'span totalNum'}).get_text()
                for i in range(1, int(pages) + 1):
                    url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city={}&needAddtionalResult=false'.format(location)
                    formdata = {
                        'first': 'true',
                        'pn': str(i),
                        'kd': key
                    }
                    print u'正在獲取職位——{}叉庐,城市{},第{}頁數(shù)據(jù)'.format(key,location,i)
                    yield scrapy.FormRequest(url,formdata=formdata,cookies=self.cookies,callback=self.parse)
    def parse(self, response):
        data = json.loads(response.text)
        content = data['content']
        positionResult = content['positionResult']
        item = LagouzpItem()
        for one in positionResult['result']:
            try:
                item['city'] = one['city']
            except:
                item['city'] = u''
            try:
                item['company_name'] = one['companyFullName']
            except:
                item['company_name'] = u''
            try:
                item['size'] = one['companySize']
            except:
                item['size'] = u''
            try:
                item['edu'] = one['education']
            except:
                item['edu'] = u''
            try:
                item['financeStage'] = one['financeStage']
            except:
                item['financeStage'] = u''
            try:
                item['firstType'] = one['firstType']
            except:
                item['firstType'] = u''
            try:
                item['industryField'] = one['industryField']
            except:
                item['industryField'] = u''
            try:
                item['name']= one['positionName']
            except:
                item['name'] = u''
            try:
                item['salary'] = one['salary']
            except:
                item['salary'] = u''
            try:
                item['secondType'] = one['secondType']
            except:
                item['secondType'] = u''
            try:
                item['workYear'] = one['workYear']
            except:
                item['workYear'] = u''
            try:
                item['time'] = one['createTime'].split(' ')[0]
            except:
                item['time'] = u''
            yield item

<em>這里用scrapy.FormRequest()直接提交表單數(shù)據(jù),怕出錯全部 try...except 后來想了一下感覺沒多大必要</em>

4.結(jié)果

職位信息

總結(jié)

<strong>用哪種方式實現(xiàn)不重要会喝,思路一定要清晰正確陡叠,再挖一個坑——用類封裝之前python爬蟲——拉鉤網(wǎng)職位信息的函數(shù),可以更加規(guī)范肢执,嘗試加多線程枉阵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市预茄,隨后出現(xiàn)的幾起案子兴溜,更是在濱河造成了極大的恐慌,老刑警劉巖耻陕,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拙徽,死亡現(xiàn)場離奇詭異,居然都是意外死亡诗宣,警方通過查閱死者的電腦和手機(jī)膘怕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來召庞,“玉大人淳蔼,你說我怎么就攤上這事侧蘸。” “怎么了鹉梨?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵讳癌,是天一觀的道長。 經(jīng)常有香客問我存皂,道長晌坤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任旦袋,我火速辦了婚禮骤菠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疤孕。我一直安慰自己商乎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布祭阀。 她就那樣靜靜地躺著鹉戚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪专控。 梳的紋絲不亂的頭發(fā)上抹凳,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音伦腐,去河邊找鬼赢底。 笑死,一個胖子當(dāng)著我的面吹牛柏蘑,可吹牛的內(nèi)容都是我干的幸冻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼咳焚,長吁一口氣:“原來是場噩夢啊……” “哼洽损!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起黔攒,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤趁啸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后督惰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體不傅,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年赏胚,在試婚紗的時候發(fā)現(xiàn)自己被綠了访娶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡觉阅,死狀恐怖崖疤,靈堂內(nèi)的尸體忽然破棺而出秘车,到底是詐尸還是另有隱情,我是刑警寧澤劫哼,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布叮趴,位于F島的核電站,受9級特大地震影響权烧,放射性物質(zhì)發(fā)生泄漏眯亦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一般码、第九天 我趴在偏房一處隱蔽的房頂上張望妻率。 院中可真熱鬧,春花似錦板祝、人聲如沸宫静。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孤里。三九已至,卻和暖如春革为,著一層夾襖步出監(jiān)牢的瞬間扭粱,已是汗流浹背舵鳞。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工震檩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜓堕。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓抛虏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親套才。 傳聞我的和親對象是個殘疾皇子迂猴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 說起寫爬蟲,大多數(shù)第一時間想到的就是python了背伴。python語法簡潔明了沸毁,加上及其豐富好用的庫,用它來寫爬蟲有...
    瘋狂的哈丘閱讀 8,179評論 1 15
  • 一搂誉、基礎(chǔ)入門 1.1什么是爬蟲 爬蟲(spider,又網(wǎng)絡(luò)爬蟲)静檬,是指向網(wǎng)站/網(wǎng)絡(luò)發(fā)起請求炭懊,獲取資源后分析并提取有...
    小天真_5eeb閱讀 11,841評論 0 6
  • 小時候以為長大了就好了 可以光明正大地去網(wǎng)吧游戲室 可以跟姑娘摟摟抱抱勾勾搭搭 不再那么小的時候以為離開家就好了 ...
    年輪止閱讀 320評論 6 2
  • 文/阿呆鳥.Lcanus 自二月底上夜班以來并级,身體狀態(tài)一直不太好,本是嬌弱身侮腹,無奈當(dāng)鐵人嘲碧。天天八點多洗澡上床,想睡...
    彤舟有愛閱讀 2,444評論 80 68
  • css tricksCodrops 炫酷 CSS 效果阿里巴巴矢量圖標(biāo)庫 內(nèi)聯(lián)style屬性style標(biāo)簽外部cs...
    zjh111閱讀 141評論 0 0