python爬取前程無憂崗位詳信息

這是之前寫的一個爬蟲,現在分享一下。這次主要是使用BeautifulSoup,這個是最簡單的一種方法。但是這次使用了lambda匿名函數,該函數是python中的一種表達式,lambda函數格式爲:冒號前是參數,冒號的右邊爲表達式。lambda返回值函數的地址,也就是函數對象。還是一步步分析:

匹配到新的URL地址,然後獲取新的URL的地址下的內容。

#設置訪問頭
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
ll = []
def geturl(url): #傳入地址
        res=requests.get(url,headers=headers)
         #設置編碼
        res.encoding=res.apparent_encoding
#對網頁進行解析
        soup=BeautifulSoup(res.text,'html.parser')
        #查找並獲得新鏈接
        lianjie=soup.find_all('p',class_='t1')   
        for i in lianjie:
            try:
                lianjie2=i.find('a')['href']
                ll.append(lianjie2)
            except:
                pass
        return ll

獲取新的地址並爬取該地址下的內容。

def getinfo(URL): #獲得新的地址並進行其地址下的內容爬取
        res=requests.get(URL,headers=headers)
        res.encoding=res.apparent_encoding
        soup=BeautifulSoup(res.text,'html.parser')
        #查找匹配’div’,class_=’cn’下的內容
        all=soup.find_all('div',class_='cn')
       #查找匹配職位、地址、公司名稱、公司介紹和學歷要求等等。
        for each in all:
            zhiwei=each.find('h1').text
            diqu=each.find('span',class_='lname')
            gongsi=each.find('p',class_='cname').text.strip('\n')
            jianjie=each.find('p',class_='msg ltype').text
            jianjie1='--'.join(list(map(lambda x:x.strip(),jianjie.split('|'))))
            xinzi=each.find('strong').text            
        all2=soup.find_all('div',class_='tCompany_main')

 對公司的崗位職責進一步爬取,對公司的信息,職責等進行爬取

for each2 in all2: #獲得年限要求和職責的URL進行爬取
            jingyan=each2.find_all('span',class_='sp4')
            jingyan1='--'.join(list(map(lambda x:x.text.strip(),jingyan)))
            fuli=each2.find_all('p',class_='t2')
            fuli1='--'.join('--'.join(list(map(lambda x:x.text.strip(),fuli))).split('\n'))
            zhize=each2.find_all('div',class_='bmsg job_msg inbox')
            for p in zhize:
                zhize1=p.find_all('p')
                zhize2='\n'.join(list(map(lambda x:x.text.strip(),zhize1)))
            dizhi=each2.find('div',class_='bmsg inbox')
            xinxi=each2.find('div',class_='tmsg inbox')

詳細代碼:

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

 
import requests
from bs4 import BeautifulSoup
import time 

j=51
while j<60:
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
    ll = []
    def geturl(url):
        res=requests.get(url,headers=headers)
        res.encoding=res.apparent_encoding
        soup=BeautifulSoup(res.text,'html.parser')
        lianjie=soup.find_all('p',class_='t1')   
        for i in lianjie:
            try:
                lianjie2=i.find('a')['href']
                ll.append(lianjie2)
            except:
                pass
        return ll
            
    total=[]
    def getinfo(URL):
        res=requests.get(URL,headers=headers)
        res.encoding=res.apparent_encoding
        soup=BeautifulSoup(res.text,'html.parser')
        
        all=soup.find_all('div',class_='cn')
       
        for each in all:
            
            zhiwei=each.find('h1').text
            diqu=each.find('span',class_='lname')
            gongsi=each.find('p',class_='cname').text.strip('\n')
            #print(gongsi)
            jianjie=each.find('p',class_='msg ltype').text
            print(jianjie)
            jianjie1='--'.join(list(map(lambda x:x.strip(),jianjie.split('|'))))
            #print(jianjie1)
            xinzi=each.find('strong').text
            #print(xinzi)
            
        all2=soup.find_all('div',class_='tCompany_main')
        for each2 in all2:
            jingyan=each2.find_all('span',class_='sp4')
            jingyan1='--'.join(list(map(lambda x:x.text.strip(),jingyan)))
            fuli=each2.find_all('p',class_='t2')
            fuli1='--'.join('--'.join(list(map(lambda x:x.text.strip(),fuli))).split('\n'))
            
            zhize=each2.find_all('div',class_='bmsg job_msg inbox')
           
            for p in zhize:
                zhize1=p.find_all('p')
                zhize2='\n'.join(list(map(lambda x:x.text.strip(),zhize1)))
            dizhi=each2.find('div',class_='bmsg inbox')
            
            xinxi=each2.find('div',class_='tmsg inbox')
            #print(zhize2)
            
            with open('C:\\Users\\USER\\Desktop\\biyeshejidaimai\\gongzuoxinxi.txt','a+',encoding='utf-8') as f:
                f.write(str(jianjie)+'\n')
                f.close()
           
            print("正在寫入第"+str(j)+"頁數據")
  
        info={#'zhiwei':zhiwei,
              #'diqu':diqu,
              #'gongsi':gongsi,
              #'jianjie':jianjie1,
              'xinzi':xinzi,
              #'jingyan':jingyan1,
              #'fuli':fuli1,
              'zhize':zhize2,
              #'dizhi':dizhi,
              'xinxi':xinxi}
        total.append(info)
        
        return total
      
        
    if __name__ == '__main__':
        url='https://search.51job.com/list/260200,000000,0000,00,9,99,%E8%AE%A1%E7%AE%97%E6%9C%BA,2,'+str(j)+'.html'#只抓一頁,可以for循環抓多頁
        
        for i in geturl(url)[1:]:
            time.sleep(2)
            getinfo(i)
            
    
    import pandas as pd
    df=pd.DataFrame(total)
    df.to_excel('C:\\Users\\USER\\Desktop\\biyeshejidaimai\\zhaopinjieshao.xls')
   
    j=j+1

結果如下:

好了,就到這裏。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章