需求分析
本项目旨在完成以下步骤:
- 爬取拉勾网所有的 python (或者其他职位)信息并按照一定格式写入文件
- 将所有的信息进行数据的清洗、筛选
- 对不同省的python职位的薪资进行平均值求算
- 将不同省份的python薪资标准通过 pyecharts 进行可视化
所以在本文的项目中,只是通过爬虫操作将我们需要的职位信息写入了文件,下一篇文章中,我将通过清理和筛选数据,对不同省的职位的薪资进行平均值的求算。
代码
import time
from selenium import webdriver
from lxml import etree
def build_chromedriver():
driver = webdriver.Chrome(executable_path=r'C:\Users\dell\Anaconda3\Scripts\chromedriver.exe')
return driver
def request_page(driver,url):
driver.get(url)
text = driver.page_source
return text
def search_position_info(driver):
info = 'python'
input_div = driver.find_element_by_xpath('//input[@id="search_input"]')
input_div.send_keys('%s'%info)
# 点击搜索按键
driver.find_element_by_xpath('//input[@id="search_button"]').click()
# 因为这里并没有产生新的页面,所以不用改变 driver 指向的页面
# 点击广告页面
driver.find_element_by_xpath('/html/body/div[9]/div/div[2]').click()
return driver
def attain_whole_page_infos(driver,html,page_number):
#先点击页面
driver.find_element_by_xpath('//span[@page="%s"]'%page_number).click()
# 获取这一页所有职位的信息
text = driver.page_source
html = etree.HTML(text)
position_info_lst = html.xpath('//h3/text()')
position_locaiton_lst = html.xpath('//span[@class="add"]//em/text()')
money_lst = html.xpath('//span[@class="money"]/text()')
with open('position.txt', 'a') as f:
for i in zip(position_info_lst,position_locaiton_lst,money_lst):
f.write(str(i)+'\n')
time.sleep(1)
if __name__ == '__main__':
url = 'https://www.lagou.com/'
driver = build_chromedriver()
text = request_page(driver,url)
driver.find_element_by_xpath('//a[@class="tab focus"]').click() #自动点击全国的位置标签
driver = search_position_info(driver) # 输入查找的职位并返回页面
page_source = driver.page_source
html = etree.HTML(page_source)
number_lst = html.xpath('//span[@page]/text()') # 再新打开的页面上获取所有页数的信息
number_int_lst = [int(number) for number in number_lst]
max_page = max(number_int_lst) # 得到页数的最大值,遍历这么多次
for i in range(1,max_page+1):
# for i in range(1,15):
attain_whole_page_infos(driver,html,i) # 在每一页上都进行信息的抽取操作,并且写入文件中