css_selector定位

1.基础定位:“#”、“.”、标签定位

css可以通过元素的id、class、标签这三个常规属性直接定位到
1.css用#号表示id属性,如:#kw
2.css用.表示class属性,如:.s_ipt
3.css直接用标签名称,无任何标示符,使用“[]”来指定属性特征.如 :input[maxlength= "255"]

 2.后代选择器

后代选择器的选择元素内部的元素 , 又叫包含选择器;
语法 : 用空格来表示 , 可以忽略中间的层级 , 直接定位到目标元素;
例如:
ul ol li em {color: blue;}

3.子选择器

子选择器选择元素的子元素
和后代选择器不同:用 > 来表示 , 需要一层一层的往下找 , 不能忽略中间的任意一层;
例如:
ul > ol > li >em

4.兄弟节点

选择 紧接 在另一个元素后的元素,二者有 相同的父元素
例如:
many > div > p.special + p

5.根据元素的属性值来选择元素

p[spec=’len2’]
p[spec*='len2'] # 包含
p[spec^='len2'] # 开头 结尾
p[spec$='len2']  
实战题:
• http://www.51job.com 
• 搜索关键词 python, 地区选择 杭州(注意,所在地已经选中,要取消), 
搜索最新 发布的职位, 抓取页面信息。 得到如下的格式化信息 
- Python开发工程师 | 杭州纳帕科技有限公司 | 杭州 | 0.8-1.6万/月 | 04-27 
- Python高级开发工程师 | 中浙信科技咨询有限公司 | 杭州 | 1-1.5万/月 | 04-27 
- 高级Python开发工程师 | 杭州新思维计算机有限公司 | 杭州-西湖区 | 1-1.5万/月 | 04-27 
- 并将信息写到文件内. 
- 要求:所有元素都要用css_selector来定位.
'''
driver = webdriver.Firefox()
driver.get('https://www.51job.com/')
driver.maximize_window()
time.sleep(3)

#点击添加城市
driver.find_element(By.CSS_SELECTOR,'#work_position_click').click()
time.sleep(2)
#选择城市  杭州
driver.find_element(By.CSS_SELECTOR,'#work_position_click_center_right_list_category_000000_080200').click()
time.sleep(2)
#确定按钮
driver.find_element(By.CSS_SELECTOR,'#work_position_click_bottom_save').click()
time.sleep(2)
#搜索python
driver.find_element(By.CSS_SELECTOR,'#kwdselectid').send_keys('python')
time.sleep(2)
#点击搜素
driver.find_element(By.CSS_SELECTOR,'div>div>div>div>button').click()

time.sleep(3)
#缩小范围
father = driver.find_element(By.CSS_SELECTOR,'.j_joblist')

#职位列表
lst_zhiwei = []
zhiwei = father.find_elements(By.CSS_SELECTOR,'[class="jname at"]')
for j in zhiwei:
    # print(j.text)
    lst_zhiwei.append(j.text)
print(lst_zhiwei)

#公司列表
lst_gongsi = []
gongsi = father.find_elements(By.CSS_SELECTOR,'[class="cname at"]')
for i in gongsi:
    #print(i.text)
    lst_gongsi.append(i.text)
print(lst_gongsi)

#地点列表
lst_didian = []
didian = father.find_elements(By.CSS_SELECTOR,'[class="d at"]')
for i in didian:
    #print(i.text)               #杭州-上城区  |  3-4年经验  |  本科
    su = i.text.find('|')       #只需要地点,切片
    s = i.text[:su]
    lst_didian.append(s)
print(lst_didian)

#薪资列表
lst_xinzi = []
xinzi = father.find_elements(By.CSS_SELECTOR,'[class="sal"]')
for i in xinzi:
    #print(i.text)
    wan = i.text.find('万')      #找到‘万’的索引
    lst1 = list(i.text)           #转为列表才能从中间加元素
    lst1.insert(wan+1,'/月')       #在万后添加/月
    s = ''.join(lst1)           #将列表转为字符串
    lst_xinzi.append(s)
print(lst_xinzi)

#日期列表
lst_riqi = []
riqi = father.find_elements(By.CSS_SELECTOR,'[class="time"]')
for i in riqi:
    #print(i.text)               #07-18发布
    s = i.text[:5]
    lst_riqi.append(s)
print(lst_riqi)

lst2 = [lst_zhiwei,lst_gongsi,lst_didian,lst_xinzi,lst_riqi]
for i in range(len(lst_zhiwei)):
    with open('test3.txt','a',encoding='utf-8') as f1:
        f1.write(f'{lst2[0][i]} | {lst2[1][i]} | {lst2[2][i]} | {lst2[3][i]} | {lst2[4][i]}\n')

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值