300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb

python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb

时间:2022-03-11 10:25:44

相关推荐

python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb

爬取的内容为百度招聘页面下的python 杭州地区

所要爬取的内容

一共爬取的是6个字段

1 招聘岗位 2 招聘城市 3 招聘公司 4 招聘薪资 5 招聘日期 6 招聘来源网站

用的是selenium + beautifulsoup + mongodb + re 模块进行爬取的内容

总体上难度不是很大,内容清除也不是很完整,记不住的或者没有记牢固的一边百度,一边加深印象。总体来说还是爬取出来了了

问题总结: 不知道是不是多进程结合selenium 爬取是不是不行,然后试着用了,我也不知道里面的原理是怎么回事,这次是自己初次入门,能力还是不足,mongodb使用的时候也不知道为什么开启了服务,但是插入数据老是插不进去,可能是被锁住了,但是删除锁之后还是会出现问题,也不知道后来问题是怎么解决的,也就那样好的吧。

在使用selenium 跳转到下一页的时候,根据get_element_byxpath(xxx) 里面的id 会根据页面的变化而变化的。如下图,可以自己亲测一下

总的值有1,2,3 昨晚弄的也是有点急什么的,不过最后爬取出来

看下爬取成果,总共586条,确实对应上了第一张图片上的586,

没有重复度。

最后贴上源代码:

# encoding=utf8import reimport timefrom selenium import webdriverfrom mon.keys import Keysfrom mon.action_chains import ActionChainsfrom bs4 import BeautifulSoupimport pymongo# 多进程from multiprocessing import Pool# 1 打开数据库连接,mongodb默认端口为27017conn = pymongo.MongoClient(host='localhost',port=27017)# 2 选择或创建数据库jobdata = conn['baidujobs']# 3 选择或创建数据集合ver_job = jobdata['verjob']baidu_baseurl = '/quanzhi?tid=4139&ie=utf8&oe=utf8&query=python%E6%9D%AD%E5%B7%9E&city_sug=%E6%9D%AD%E5%B7%9E'def set_winscroll(driver):time.sleep(2)driver.execute_script('window.scrollBy(0,2000)')time.sleep(3)driver.execute_script('window.scrollBy(0,3000)')time.sleep(3)# 1 初始化driverdriver = webdriver.PhantomJS()# 2 调用get方法driver.get(baidu_baseurl)# 3 进入网页set_winscroll(driver)# 4 获取资源(第一页的数据)we_data = driver.page_source# print('first_we_data ' + we_data)def parse_html(html):soup = BeautifulSoup(html, 'lxml')item_url = soup.findAll('a', {'class': 'clearfix item line-bottom'})# for item in zip(item_url):#print(item.get('href'))# 职位信息jobs = soup.findAll('div', {'class': 'title-h3 line-clamp1'})# for job in jobs:# print(job.string) # 职位信息# 地址 + 公司名compy = soup.findAll('p', {'class': 'area line-clamp1'})# for com in compy:#print(com.string)# 薪资salarys = soup.findAll('p', {'class': 'salary'})# for salary in salarys:#print(salary.string)# 发布时间跟发布来源网站addresss = soup.findAll('div', {'class': 'right time'})# print(addresss)reg = r'<p>(.*?)</p>'regx = pile(reg)ads = re.findall(regx, str(addresss))# print(ads)# for adds in ads:#data = adds.split('|')#print(data)for itm_url, job_detail, ver_compny, ver_salary, ver_addres in zip(item_url, jobs, compy, salarys, ads):data = {'itme_url': ''+itm_url.get('href'),'job_detail': job_detail.string,'ver_compny': str(ver_compny.string),'ver_salary': ver_salary.string,'ver_addres': str(ver_addres).split('|'),}print(data)# 插入数据库ver_job.insert_one(data) # 插入数据库失败f.write(str(data))def get_page_source(page_num):time.sleep(2)driver.find_element_by_xpath('//*[@id="pagination"]/p/span/a[%s]' % page_num).click()# //*[@id="pagination"]/p/span/a[1] 为在第一页的按钮# //*[@id="pagination"]/p/span/a[2] 为第二页的按钮set_winscroll(driver)we_data = driver.page_sourcereturn we_dataf = open('百度招聘前30页杭州.txt', 'a',encoding='utf-8')# 首页的数据def getBaiduHangZhouJob(we_data):parse_html(we_data)for i in range(1, 50):if i==1:we_data = get_page_source(1)parse_html(we_data)elif i<=5:we_data = get_page_source(str(2))parse_html(we_data)else:we_data = get_page_source(str(3))parse_html(we_data)f.close()if __name__ == '__main__':getBaiduHangZhouJob(we_data)# pool = Pool(processes=10)# pool.map_async(getBaiduHangZhouJob(we_data))# pool.close()# f.close()

这里也使用了存入道txt文件中的方法,两个方法都有用到。

这次是第二次自己单独做练习selenium + mongodb

对于分布式爬虫scraper框架,需要进行开始的学习了,一开始对mongodb , selenium 也是有抵触,惧怕心理,不过下来之后却也是差不多的感觉,这次是入门了吧。慢慢的了解,熟悉,练习,回头过来你会发现也就是那么回事,加油

下次, scraper分布式爬虫的练习 ,对于python开发岗位,自己也要学会Django的学习开发,路子还有很长,需要自己静下心来摸索。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。