python+selenium 拉勾网信息获取,主要是定位元素的练习

本文档介绍了使用Python+Selenium进行拉勾网测试开发工程师职位信息抓取的步骤,包括打开网页、处理地址选择框、定位输入框和按钮、抓取职业列表、写入文档及翻页。在实践过程中,作者遇到了文档中文乱码和页尾列表长度不固定的问题,通过设置编码和使用try-except结构成功解决了问题。
摘要由CSDN通过智能技术生成

牢记:学而不思则罔,思而不学则殆

今天练习了拉勾网关于测试开发工程师职业的获取

step1:打开拉勾网

step2:处理地址选择框

step3:定位输入框,输入“测试开发工程师”;定位提交按钮

step4:对职业信息进行定位获取,获取的是列表

step5:把当前页的信息写入文档

step6:定位下一页

遇到的问题:

问题1:

文档出现中文乱码

解决方案:

with open('job_info_txt','a',encoding='utf8') as f

加了:encoding='utf-8

问题2:

当我发现每页有15条记录的时候,自然而然的进行range(15)的循环,如果最后一页没有15条记录,就会溢出列表

解决方案:

try except

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
import os

driver=webdriver.Chrome()
#打开拉勾网
driver.get('https://www.lagou.com')
#最大化窗口
driver.maximize_window()
time.sleep(2)
driver.implicitly_wait(2)
#打开官网的时候,会有选择的地点,定位到‘X’,关闭选择
driver.find_element_by_id('cboxClose').click()
time.sleep(2)

#搜索测试开发工程师
driver.find_element_by_css_selector('#search_input').send_keys('测试开发工程师')
driver.find_element_by_css_selector('#search_button').click()
time.sleep(2)

#因为要多次调试跑代码,所以如果文件已存在,就进行删除
try:
    os.remove('job_info_txt')
except FileNotFoundError:
    pass

#定位需要的信息
def jobs():
    try:
        job_names=driver.find_elements_by_xpath('//div/a/h3')
        job_address=driver.find_elements_by_css_selector('.add>em')
        job_money_require=driver.find_elements_by_css_selector('div.p_bot>div.li_b_l')

    except NoSuchElementException:
        driver.quit()
    else:
        return job_names,job_address,job_money_require

def next_page():
    try:
        #定位下一页
        next_p=driver.find_element_by_css_selector('.pager_next')
    except NoSuchElementException:
        driver.quit()
    else:
        next_p.click()

#写入文件
def write_file(job_data):
    #之前没有加encoding='utf-8',导致文件中文乱码,后解决
    with open('job_info_txt','a',encoding='utf8') as f:
        f.write(job_data)
        f.write('\n')
        f.close()

# 主程序,循环翻页,获取每一条数据,并写到 job_info.txt 文件。
for page in range(30):
    jobs_names, jobs_address, jobs_money_require=jobs()
    for i in range(15):
        try:
            job_name=jobs_names[i].text
            job_address=jobs_address[i].text
            info=jobs_money_require[i].text.split(' ')
            job_money=info[0]
            job_require=info[1]
            job_edu=info[3]
            job_data=job_name+','+job_address+','+job_money+','+job_require+','+job_edu
            write_file(job_data)
        except:
            pass
    next_page()
    time.sleep(10)






job_info_txt:

测试开发工程师,上海·虹梅路,15k-25k,经验1-3年,本科
测试开发工程师,成都·锦江区,10k-20k,经验5-10年,本科
测试开发工程师,杭州·拱墅区,20k-35k,经验3-5年,本科
测试开发工程师,广州·琶洲,9k-14k,经验1-3年,本科
测试开发工程师,北京·望京,20k-25k,经验5-10年,本科
测试开发工程师(海外),广州·沙河,15k-30k,经验3-5年,不限
测试开发工程师,苏州·元和,15k-30k,经验3-5年,本科
测试开发工程师,济南·文化西…,6k-10k,经验1-3年,大专
112187-测试开发工程师(SH),上海·浦东新…,12k-20k,经验3-5年,本科
测试开发工程师(J10139),上海·汶水路,15k-20k,经验不限,本科
测试开发工程师,深圳·益田村,12k-18k,经验3-5年,本科
测试开发专家,深圳·深圳湾,20k-40k,经验3-5年,本科
测试开发工程师,上海·张江,25k-35k,经验5-10年,本科
测试工程师/测试开发,北京·酒仙桥,11k-17k,经验1-3年,本科
测试开发工程师-市场营销部(J13638),北京·万泉河,15k-20k,经验3-5年,本科
资深测试开发工程师,广州·琶洲,15k-25k,经验3-5年,本科
测试开发工程师,北京·上地,30k-60k,经验3-5年,本科
高级测试开发工程师(客户端),北京·中关村,25k-35k,经验3-5年,大专
资深测试开发工程师,北京·酒仙桥,20k-35k,经验3-5年,本科
测试开发工程师,北京·海淀区,25k-40k,经验3-5年,本科
测试开发工程师,南京·双闸,15k-30k,经验3-5年,本科
【暑期实习生】测试开发实习生(J10354),上海·莘庄,2k-4k,经验应届毕业生,本科
测试开发专家,北京·大望路,20k-40k,经验3-5年,本科
服务端测试开发工程师,杭州·拱墅区,20k-35k,经验3-5年,本科
测试开发工程师,南昌·洪都,7k-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值