首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于bs4的拉勾网AI相关工作爬虫实现

年初大家可能是各种跳槽吧,看着自己身边的人也是一个个的要走了,其实是有一点伤感的。人各有志吧,不多评论。这篇文章主要是我如何抓取拉勾上面AI相关的职位数据,其实抓其他工作的数据原理也是一样的,只要会了这个,其他的都可以抓下来。一共用了不到100行代码,主要抓取的信息有“职位名称”,“月薪”,“公司名称”,“公司所属行业”,“工作基本要求(经验,学历)”,“岗位描述”等。涉及的工作有“自然语言处理”,“机器学习”,“深度学习”,“人工智能”,“数据挖掘”,“算法工程师”,“机器视觉”,“语音识别”,“图像处理”等几大类。

下面随便截个图给大家看下,我们想要的信息

然后看下我们要的信息在哪里

然后职位详细信息是的url就在那个href里面,所以关键是要取到那个href就OK了。

下面直接上代码

首先我们需要判断一个url是不是合法的url,就是isurl方法。

urlhelper方法是用来提取url的html内容,并在发生异常时,打一条warning的警告信息

importurllib.request

frombs4importBeautifulSoup

importpandasaspd

importrequests

fromcollectionsimportOrderedDict

fromtqdmimporttqdm,trange

importurllib.request

fromurllibimporterror

importlogging

logging.basicConfig(level=logging.WARNING)

defisurl(url):

ifrequests.get(url).status_code ==200:

return True

else:

return False

defurlhelper(url):

try:

req = urllib.request.Request(url)

req.add_header("User-Agent",

"Mozilla/5.0 (Windows NT 6.1; WOW64)"

" AppleWebKit/537.36 (KHTML, like Gecko) "

"Chrome/45.0.2454.101 Safari/537.36")

req.add_header("Accept","*/*")

req.add_header("Accept-Language","zh-CN,zh;q=0.8")

data = urllib.request.urlopen(req)

html = data.read().decode('utf-8')

returnhtml

excepterror.URLErrorase:

logging.warning("{}".format(e))

下面就是爬虫的主程序了,里面需要注意的是异常的处理,很重要,不然万一爬了一半挂了,前面爬的又没保存就悲剧了。还有一个是想说BeautifulSoup这个类真的是十分方便,熟练使用能节省很多时间。

importurllib.request

frombs4importBeautifulSoup

importpandasaspd

importrequests

fromcollectionsimportOrderedDict

fromtqdmimporttqdm,trange

importurllib.request

fromurllibimporterror

importlogging

names = ['ziranyuyanchuli','jiqixuexi','shenduxuexi','rengongzhineng',

'shujuwajue','suanfagongchengshi','jiqishijue','yuyinshibie',

'tuxiangchuli']

fornameintqdm(names):

savedata = []

page_number =

forpageinrange(1,31):

page_number +=1

ifpage_number %5==:

print(page_number)

rooturl ='https://www.lagou.com/zhaopin/{}/{}/'.format(name,page)

if notisurl(rooturl):

continue

html = urlhelper(rooturl)

soup = BeautifulSoup(html,"lxml")

resp = soup.findAll('div',attrs={'class':'s_position_list'})

resp = resp[]

resp = resp.findAll('li',attrs={'class':'con_list_item default_list'})

foriintrange(len(resp)):

position_link = resp[i].findAll('a',attrs={'class':'position_link'})

link = position_link[]['href']

ifisurl(link):

htmlnext = urlhelper(link)

soup = BeautifulSoup(htmlnext,"lxml")

try:

#职位描述

job_bt = soup.findAll('dd',

attrs={'class':'job_bt'})[].text

except:

continue

try:

#工作名称

jobname = position_link[].find('h3').get_text()

except:

continue

try:

#工作基本要求

p_bot = resp[i].findAll('div',

attrs={'class':'p_bot'})[].text

except:

continue

try:

#月薪

money = resp[i].findAll('span',

attrs={'class':'money'})[].text

except:

continue

try:

#行业

industry = resp[i].findAll('div',

attrs={'class':'industry'})[].text

except:

continue

try:

#公司名字

company_name = resp[i].findAll(

'div',attrs={'class':'company_name'})[].text

except:

continue

rows = OrderedDict()

rows["jobname"] = jobname.replace(" ","")

rows["money"] = money

rows["company_name"] = company_name.replace("\n","")

rows["p_bot"] = p_bot.strip().replace(" ",""). \

replace("\n",",").replace("/",",")

rows["industry"] = industry.strip().\

replace("\t","").replace("\n","")

rows["job_bt"] = job_bt

savedata.append(rows)

#保存到本地

df = pd.DataFrame(savedata)

df.to_csv("./datasets/lagou/{}.csv".format(name),index=None)

然后,整个爬虫运行的还是有点慢的,到现在我这边还没运行完,等运行完了以后,可以大致分析一下什么工作最适合自己,找到和自己最匹配的工作,大家也可以去试试,我是觉得挺有意思的,今天还写了一个抓取百度百科的爬虫,下次拿出来和大家分享。最近写爬虫上瘾,越写感觉越有意思,爬虫就是这么神奇,你不会的时候,就觉得很牛逼,其实会了的话,也没啥了。

最后,最近都是爬虫的文章,感觉我的这个号越写越乱了,什么都有了,不知道大家看的是否happy?这里想说一句我的领导说的一句话,“努力成为没有什么不会的”,哈哈哈,反正都学一点吧,年轻人不要把自己限制在一个圈子里面,这样可能你自己越走路子越窄,我是想着成为一名全栈工程师,恩,加油,共勉!!!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301G1BN3H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券