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')