分分钟爬取51job
爬取前程無憂(一)
- 步驟:
- 1.解析url
- 2.獲取url上的內容
- 3.對獲取的內容進行解析
- 4.對解析后的內容進行存儲
步驟:
1.解析url
首先,明確我們的目的:爬取51上所有的python崗位的相關職位信息
這是我們的原始url:
當然我們的有效url僅有:
https://search.51job.com/list/010000,000000,0000,00,9,99,python,2,3.html根據我們的觀察一共有六頁
我們打開第二頁,第三頁對比一下
ok,我們可以很明顯的發現規律,
url中python和頁碼,沒錯這就是我們需要處理的第一個點
首先將我們的URL進行一個完整的表述,我們可以這樣做:
在這里我們的key可以采取從屏幕上進行獲取
這里我們可以輸出看一下我們的url
ok,我們的url就這樣處理好了
2.獲取url上的內容
我們已經獲取了所有的網頁地址,接下來我們使用requests庫的get請求來獲取網頁上的內容,同時給我們的爬蟲加上一點小小的偽裝,
首先要導入庫
然后使用requests庫的get請求來得到我們的網頁源碼,
response = requests.get(url=url,headers=headers)response里面就包含了我們需要的內容,我們可以查看其內容
print(response.status_code) # 打印狀態碼,狀態碼200表示ok print(response.url) # 打印請求url print(response.headers) # 打印頭信息 print(response.cookies) # 打印cookie信息 print(response.text) # 以文本形式打印網頁源碼 print(response.content) # 以字節流形式打印headers則是請求頭,是區分瀏覽器和程序的必要元素,
更多的請求頭信息可以查看大佬:https://blog.csdn.net/gklcsdn/article/details/101522169
如何查看我們的請求頭呢,我們用Google瀏覽器打開我們的網頁,按下F12進行元素檢查,然后你就可以看到一串前端代碼,
我們找到network,點進去,然后刷新我們的頁面,點開文件,這里就可以看到很多的信息了,
然后我們找到我們需要的進行添加,
3.對獲取的內容進行解析
這里我們使用xpath模塊來進行解析
response.encoding = 'gbk' tree = etree.HTML(response.text) ## 解析HTML文檔,返回根節點對象 divs = tree.xpath('//div[@class = "dw_table"]/div[@class = "el"]')tree.xpath:在源碼中找出我們所需要的信息(直接找我們需要的即可,注意)
來一個for循環,將我們得到的每一個值都進行保存。
gszw = div.xpath('.//p//a/@title')[0] gsmc = div.xpath('.//span[@class = "t2"]/a/@title')[0] gzdd = div.xpath('.//span[@class = "t3"]/text()')[0] gzxc = div.xpath('.//span[@class = "t4"]/text()')[0] fbsj = div.xpath('.//span[@class = "t5"]/text()')[0]至此,我們就已經得到了全部的數據
4.對解析后的內容進行存儲
我們獲取數據自然是為了將數據進行保存,而后進行分析,這里簡單的將數據保存為json文件和csv文件
完整代碼:
import requests from lxml import etree import json,csv,timeif __name__ == '__main__':key = input('請輸入想查詢的職業/崗位:' )for i in range(6):url = 'https://search.51job.com/list/010000,000000,0000,00,9,99,' + str(key) + ',2,' + str(i+1) + '.html'time.sleep(1)data = []fp = open('./51job_python.json',mode='a',encoding='utf-8')fp2 = open('./51job2_python.csv',mode='a',encoding='utf-8')headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}response = requests.get(url=url,headers=headers)response.encoding = 'gbk'tree = etree.HTML(response.text)divs = tree.xpath('//div[@class = "dw_table"]/div[@class = "el"]')try:for div in divs:gszw = div.xpath('.//p//a/@title')[0]gsmc = div.xpath('.//span[@class = "t2"]/a/@title')[0]gzdd = div.xpath('.//span[@class = "t3"]/text()')[0]gzxc = div.xpath('.//span[@class = "t4"]/text()')[0]fbsj = div.xpath('.//span[@class = "t5"]/text()')[0]d = dict()d['職位'] = gszwd['公司'] = gsmcd['地區'] = gzddd['薪酬'] = gzxcd['時間'] = fbsjdata.append(d)if gzxc == None:gzxc = 'mianyi'print("一條信息獲取成功")reslit = json.dumps(data,ensure_ascii = False)fp.write(reslit)fp2.write('\n\n職位:%s。\n公司:%s。\n地區:%s。\n薪酬:%s。\n時間:%s'%(gszw,gsmc,gzdd,gzxc,fbsj))except Exception as e:fp2.write('\n\n職位:%s。\n公司:%s。\n地區:%s。\n薪酬:%s。\n時間:%s' % (gszw, gsmc, gzdd, '面議', fbsj))fp.close()fp2.close()至于為什么是前程無憂,而不是Boss和智聯
51job:爬取沒有限制
boss直聘:需要設置IP,重點設置動態IP
智聯:動態抓取,重點獲取數據接口
嗯,任重道遠。
總結
以上是生活随笔為你收集整理的分分钟爬取51job的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单片机快速开平方的算法
- 下一篇: rcar-du 通过modetest命令