30分鐘寫出一個51job職位小爬蟲,小白也能寫的出來,不用懂正則, 不用懂xpath,分分鐘寫出來,大神走開
前提環(huán)境:你的電腦里裝過python 2/3 和 pip(python包管理工具)
- 第一步: 命令行輸入 sudo pip install scrapy
安裝scrapy,scrapy是一個非常流行的爬蟲框架使用簡單,這一步你網(wǎng)速夠快5秒搞定 - 第二步:命令行輸入 scrapy startproject my51JobSpider
創(chuàng)建了一個scrapy叫 my51JobSpider,看看目錄,創(chuàng)建成功,耗時1秒
├── README.md
└── my51JobSpider
├── my51JobSpider
│ ├── __init__.py
│ ├── __pycache__
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ ├── __init__.py
│ └── __pycache__
└── scrapy.cfg
下面來簡單介紹一下各個主要文件的作用:
scrapy.cfg :項目的配置文件
/ :項目的Python模塊冬耿,將會從這里引用代碼
items.py :項目的目標文件
pipelines.py :項目的管道文件
settings.py :項目的設(shè)置文件
spiders/ :存儲爬蟲代碼目錄
-
第三步:進入spiders目錄下輸入 scrapy genspider mainSpider "51job.com"
目錄下創(chuàng)建一個名為mainSpider的爬蟲爱咬,并指定爬取域的范圍是"51job.com",當你敲的比較慢吧,給你1秒鐘
進入目錄看看里面現(xiàn)在有什么吧
start_urls = () :爬取的URL元祖/列表笋鄙。爬蟲從這里開始抓取數(shù)據(jù)找岖,所以爹脾,第一次下載的數(shù)據(jù)將會從這些urls開始货抄。其他子URL將會從這些起始URL中繼承性生成。
parse(self, response) :解析的方法,每個初始URL完成下載后將被調(diào)用,調(diào)用的時候傳入從每一個URL傳回的Response對象來作為唯一參數(shù),主要作用如下:
負責解析返回的網(wǎng)頁數(shù)據(jù)(response.body),提取結(jié)構(gòu)化數(shù)據(jù)(生成item)
生成需要下一頁的URL請求曲管。
-
第四步:我們現(xiàn)在分析一個51job的結(jié)構(gòu)
下圖是各個職位類型的入口
這時候我們需要用到兩個神器 chrome瀏覽器和XPath Helper插件,別說你沒chrome,下載一個唄
右擊
不會正則和XPATH怎么爬呢,重點來了!!!!
打開XPath Helper插件
現(xiàn)在你的屏幕應(yīng)該是這樣的
我們選擇要爬取的連接
右擊標簽->copy->copy xpath,我們會得到一串神奇的字符
/html/body/div[5]/div[2]/div[1]/a[1]
輸入xpath 插件
很顯然這不是我們想要的鏈接,介紹一個xpath語法,在后面加上/@xxx,就代表獲取這個表情的xxx屬性,我們試試
/html/body/div[5]/div[2]/div[1]/a[1]/@href
ok這樣就獲取到了我們想要的鏈接,但是只有一條,再來說明一下xpath第二個重要的語法,//xxx代表獲取這個層級下所有的xxx標簽,我們繼續(xù)改造
/html/body/div[5]/div[2]//div//a/@href
搞定!
寫行代碼
def parse(self, response):
liststype = response.xpath('/html/body/div[5]/div[2]//div//a/@href')
for url in liststype:
print url.extract()
運行看看效果~~~~~ 兜兜轉(zhuǎn)轉(zhuǎn)介紹了很多基礎(chǔ)知識 ~~~ 10分鐘過去了
-
第五步:殊途同歸
//[@id="resultList"]/div[4]/p/span/a/@href
同樣道理改造一下
//[@id="resultList"]//div/p/span/a/@href
除了內(nèi)容我們還要獲取一下頁碼的鏈接
//[@id="resultList"]/div[55]/div/div/div/ul/li[3]/a
同樣道理改造一下
//[@id="resultList"]/div[55]/div/div/div/ul//li/a/@href
5分鐘~~~ 瑟瑟發(fā)抖~~~
-
第六步:終極對決
終于到了我們最后一關(guān)啦.額..最后一頁
同樣道理獲取我們想要的信息,大家都很聰明應(yīng)該能明白的~ 5分鐘應(yīng)該夠了吧
職位名稱 = '/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/text()'
地區(qū) = '//span[@class="lname"]/text()'
薪資 = '/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()'
經(jīng)驗 = '/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[1]/text()'
雪咯 = '/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[2]/text()' 第⑦步:把代碼補全
強行9分鐘~~
def parse(self, response):
liststype = response.xpath('/html/body/div[5]/div[2]//div//a/@href')
for url in liststype:
yield scrapy.Request(url=url.extract(),callback=self.parseSearch)
pass
def parseSearch(self,response):
listsjob = response.xpath('//*[@id="resultList"]//div/p/span/a/@href')
listpages = response.xpath('//div[@class="p_in"]/ul/li/a/@href')
for page in listpages:
yield scrapy.Request(url=page.extract(),callback=self.parseSearch)
for url in listsjob:
yield scrapy.Request(url=url.extract(),callback=self.parseDesc)
pass
def parseDesc(self,response):
context= response.text
title = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/text()').extract()[0]
area = response.xpath('//span[@class="lname"]/text()').extract()[0]
money = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()').extract()[0]
exp = response.xpath('/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[1]/text()').extract()[0]
study = response.xpath('/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[2]/text()').extract()[0]
all = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[2]/text()').extract()[0]
lists = all.replace(' ','').replace('\r','').replace('\t','').split('|')
company = lists[0]
people = lists[1]
type = lists[2]
print (title)
item = My51JobspiderItem()
item['title'] = title
item['area'] = area
item['money'] = money
item['company'] = company
item['people'] = people
item['type'] = type
item['study'] = study
item['exp'] = exp
yield item
pass
看看效果~~ good
總結(jié):
娛樂貼~~ 給大家多一個無聊時的樂趣,xpath還是有很多語法需要學習,還有scrapy,有問題直接問,保證回答但是不許罵我,還有建議大家不要在繁忙時間隨便爬,友好一點,凌晨兩三點去偷偷的干
github地址:https://github.com/CZXBigBrother/51JobSpider