java搜索拉钩_使用selenium动态渲染爬取拉勾网上450个java职位的信息

本文介绍了如何利用Selenium和Python爬取拉勾网上450个Java职位的相关信息,包括职位、工资和职位需求。在抓取过程中,通过分析页面元素和Ajax请求,发现需要应对动态渲染的问题。最后,数据被存储到MongoDB数据库中。
摘要由CSDN通过智能技术生成

开始这个小项目的时候要确保你的电脑中有装上selenium以及相应的浏览器驱动,还有别忘了Mongodb数据库

我们首先打开拉勾网的官网查看下基本的页面元素

当我在搜索框中输入java的时候,url如下,当我想用下面的url进行抓取的时候,我发现事情并不简单。

de0fc528af65037080b2eb1e34961429.png

我点击下一页的时候发现,url并没有变化,所以并不能用最基本的抓取方法了,而改为ajax请求进行抓取

5a061906b4e896358389856585ec73a8.png

当我查看ajax请求的时候,发现事情又不简单的了,这个分页的请求带的参数时Form data,也就是表单形式的参数,

所以,拉勾网上的ajax请求不是get请求,不能再url里面直接带参数了,而是post请求

所以用ajax的请求方式也是不能顺利的抓取的,至少对于我这个新手来说

d9ab00bd5a2e0ef6aaf6eca8dc4c7111.png

所以我决定采取Selenium动态渲染的方式进行抓取

确定基本的抓取方式之后我们就可以开始工作啦!

首先导入必备的包

from time importsleepfrom pyquery importPyQuery as pqfrom selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver importActionChainsfrom selenium.common.exceptions import TimeoutException

创建一个lagou.py文件,声明一个LagouSpider类,并且定义它的init方法

classLagouSpider(object):def __init__(self):

self.url= 'https://www.lagou.com/'self.browser=webdriver.Chrome()

self.browser.set_window_size(1920, 1080)

self.wait= WebDriverWait(self.browser,20)

self.list=[]

定义搜索的方法

defsearch(self):try:

self.browser.get(self.url)

actions=ActionChains(self.browser)

actions.click()

actions.perform()

input= WebDriverWait(self.browser, 10).until(

EC.presence_of_element_located((By.ID,'search_input'))

)

submit= WebDriverWait(self.browser,10).until(

EC.element_to_be_clickable((By.ID,'search_button'))

)

sleep(2)

input.send_keys('JAVA')

sleep(2)

submit.click()exceptTimeoutException:return self.search()

定义获取下一页的方法

defnext_page(self):try:

next= WebDriverWait(self.browser,10).until(

EC.element_to_be_clickable((By.CLASS_NAME,'pager_next'))

)

next.click()exceptTimeoutException:

self.next_page()

获取我要爬取的数据,包括职位,工资,职位的需求

#获取数据以及对数据进行清洗

defget_salary(self):

html=self.browser.page_source

doc=pq(html)

items= doc('.list_item_top').items()for item initems:

java_dict={'position':item.find('.p_top .position_link h3').text(),'salary':item.find('.p_bot .li_b_l').text().split(' ',1)[0],'qualification':item.find('.p_bot .li_b_l').text().split(' ',1)[1]

}print(java_dict)

self.list.append(java_dict)

self.save_data(java_dict)print(len(self.list))

sleep(2)

self.next_page()

最后创建一个config.py,MONGODB的配置

MONGO_URL ='localhost'MONGO_DB= 'lagou'MONGO_COLLECTION='java'

在lagou.py文件中写上

from config import *

importpymongo

client=pymongo.MongoClient(MONGO_URL)

db= client[MONGO_DB]

在LagouSpider中,保存到MONGODB数据库中

#保存到MONGDB中

defsave_data(self,result):try:ifdb[MONGO_COLLECTION].insert(result):print('存储到MONGODB成功')exceptException:print('存储到MONGODB失败')

创建统筹调用的方法

defmain(self):

self.search()for i in range(1,31):

self.get_salary()

最后开始爬取啦

LagouSpider().main()

查看MONGODB数据库

e1ff032e7d8f746220b883862c6c6ebf.png

已经成功爬取啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值