scrapy爬蟲之爬取拉勾網職位資訊

2021-08-19 03:51:53 字數 3307 閱讀 6796

import scrapy

class lagouitem(scrapy.item):

# define the fields for your item here like:

# name = scrapy.field()

positionid = scrapy.field()#職位id,作為辨識字段插入資料庫

city = scrapy.field()# 城市

positionname = scrapy.field()#職位

salary = scrapy.field()#工資

workyear = scrapy.field()#經驗要求

education = scrapy.field()# 教育程度

businesszones = scrapy.field()#工作地點(科技園)乙個元素的列表

companyshortname = scrapy.field()#公司簡稱

companyfullname = scrapy.field()# 公司全稱

companysize = scrapy.field()# 公司人數規模

industryfield = scrapy.field()#公司服務方向

positionadvantage = scrapy.field()#職位優勢(一句話)

createtime = scrapy.field()# 崗位發布時間

此處注意拉鉤網的反爬策略,所以加入帶有不用登陸獲得的cookie的headers(不加cookie會導致只能爬四五頁就會因請求頻繁而反爬),另外需要在settings裡設定scrapy自帶的cookie機制關閉

import scrapy

from lagou.items import lagouitem

import json,time,random

class lagouspiderspider(scrapy.spider):

name = "lagouspider"

allowed_domains = ["www.lagou.com"]

url = ''#city=%e6%b7%b1%e5%9c%b3&needaddtionalresult=false'

page = 1

allpage =0

cookie = ???

'referer': '',

'cookie': cookie }

def start_requests(self):

yield scrapy.formrequest(self.url, headers=self.headers, formdata=, callback=self.parse)

def parse(self, response):

#print(response.text)

item = lagouitem()

data = json.loads(response.text)

totalcount = data['content']['positionresult']['totalcount']#總共多少條資訊

resultsize = data['content']['positionresult']['resultsize']#每頁多少條資訊

result = data['content']['positionresult']['result']#得到乙個包含15個資訊的列表

for each in result:

for field in item.fields:

if field in each.keys():

item[field] = each.get(field)

yield item

time.sleep(random.randint(5, 10))

if int(resultsize):

self.allpage = int(totalcount) // int(resultsize) + 1

if self.page < self.allpage:

self.page += 1

yield scrapy.formrequest(self.url, headers=self.headers, formdata=, callback=self.parse)

import json,pymongo

from scrapy.conf import settings

class jsonpipeline(object):

def __init__(self):

self.file = open('job.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 close_spider(self,spider):

self.file.close()

class mongopipeline(object):

def __init__(self):

mongo_uri = settings.get('mongo_uri')# localhost:27017

mongo_db = settings.get('mongo_db')#資料庫名

self.client = pymongo.mongoclient(mongo_uri)

self.db = self.client[mongo_db]

def process_item(self, item, spider):

return item

def close_spider(self, spider):

self.client.close()

cookies_enabled = false

item_pipelines =

mongo_uri = 'localhost:27017'

mongo_db = 'lagou'

注意:1、headers

2、headers裡的cookie

3、formdata 

4、settings設定scrapy預設的cookie載入機制關閉,而是用每次發請求時自帶的包含cookie的headers

5、mongodb資料庫的儲存insert用到的兩種方法,此處update很關鍵(取的去重比較的字段應唯一),可以去重

初級爬蟲 爬取拉勾網職位資訊

主要用到的庫 requests 1.原始url位址,我們檢視網頁源 發現裡面並沒有我們想要的職位資訊,這是因為拉勾網有反爬蟲機制,它的職位資訊是通過ajax動態載入的。2.我們按下f12,找到network 在左側name中找到 positionajax.json?needaddtionalresu...

Python爬取拉勾網招聘資訊

最近自學研究爬蟲,特找個地方記錄一下 就來到了51cto先測試一下。第一次發帖不太會。先貼個 首先開啟拉勾網首頁,然後在搜尋框輸入關鍵字python。開啟抓包工具。因為我的是mac os,所以用的自帶的safari瀏覽器的開啟時間線錄製。通過抓取post方法,可以看到完整url 然後可以發現post...

python爬蟲之scrapy爬取豆瓣電影(練習)

開發環境 windows pycharm mongodb scrapy 任務目標 任務目標 爬取 豆瓣電影top250 將資料儲存到mongodb中。items.py檔案 coding utf 8 define here the models for your scraped items see d...