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...