嗨喽~大家好呀,这里是魔王呐 ❤ ~!
python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取
环境使用:
Python
Pycharm
模块使用:
selenium --> pip install selenium==3.141.0
time
csv
驱动下载地址: https://googlechromelabs.github.io/chrome-for-testing/#stable
小思路
今天案例使用: 谷歌浏览器
selenium 模拟人的行为操作浏览器:
自动打开浏览器, 获取网页上面数据内容多页数据采集: 需要登陆账号才能实现翻页
通过selenium实现免登陆操作:
使用selenium访问网址的时候, 网页状态是登陆的状态
智联招聘如果你想要通过requests获取数据:
需要学习JS逆向 --> 瑞数5js逆向比较复杂 --> 通过selenium去获取数据 但是效率很低
获取数据代码
“”“导入模块”“”
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入自动化测试模块
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 导入csv模块
import csv
# 导入时间模块
import time
“”“创建文件对象”“”
options = Options()
options.add_argument("--user-data-dir=C:\\Users\\shanhe\\AppData\\Local\\Google\\Chrome\\User Data")
f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['职位','公司','薪资','年薪','城市','区域','经验','学历','公司性质','公司规模','标签',
])
csv_writer.writeheader()
打开浏览器
driver = webdriver.Chrome(options=options) # 实例化一个浏览器对象
访问目标网址
driver.get('https://sou.zhaopin.com/?jl=538&kw=python&p=1')
“”“页面下滑操作”“”
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def drop_down():"""执行页面滚动的操作""" # javascriptfor x in range(1, 12, 2): # 1 3 5 7 9 在你不断的下拉过程中, 页面高度也会变的time.sleep(1)j = x / 9 # 1/9 3/9 5/9 9/9# document.documentElement.scrollTop 指定滚动条的位置# document.documentElement.scrollHeight 获取浏览器页面的最大高度js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % jdriver.execute_script(js)
""" 定位元素 <元素面板上面>driver.find_element_by_css_selector() 通过css选择定位元素driver.find_element_by_xpath() 通过xpath定位元素driver.find_element_by_id() 通过 ID 定位元素driver.find_element_by_class_name() 通过 class类 名定位元素- find_elements 表示提取多个- find_element 表示提取一个网页元素内容还没有加载完成, 就直接获取相关数据, 可能得不到内容 """
def get_content():# 延时等待 等元素内容加载完成driver.implicitly_wait(10)drop_down()# 获取整页20条 职位信息标签divs = driver.find_elements_by_css_selector('.joblist-box__item')# for循环遍历for div in divs:
"""提取具体数据- get_attribute 表示获取标签属性- text 表示获取标签文本"""
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''title = div.find_element_by_class_name('iteminfo__line1__jobname__name').get_attribute('title')name = div.find_element_by_class_name('iteminfo__line1__compname__name').get_attribute('title')salary = div.find_element_by_class_name('iteminfo__line2__jobdesc__salary').textsalary_info = salary.split(' · ')if len(salary_info) == 2:year_salary = salary_info[-1].replace('薪', '')money = salary_info[0]else:year_salary = '12'money = salary_info[0]info = [i.text for i in div.find_elements_by_class_name('iteminfo__line2__jobdesc__demand__item')]area_info = info[0].split('-') # 城市信息# len(area_info) 统计元素个数 area_info==2 直接判断 area_info是否等于2if len(area_info) == 2:city = area_info[0] # 城市area = area_info[1] # 区域else:city = area_info[0] # 城市area = '未知'exp = info[1] # 经验edu = info[2] # 学历tags = ','.join([j.text for j in div.find_elements_by_class_name('iteminfo__line3__welfare__item')])cop_info = [x.text for x in div.find_elements_by_class_name('iteminfo__line2__compdesc__item')]cop_type = cop_info[0]cop_num = cop_info[1]dit = {'职位': title,'公司': name,'薪资': money,'年薪': year_salary,'城市': city,'区域': area,'经验': exp,'学历': edu,'公司性质': cop_type,'公司规模': cop_num,'标签': tags,}# 写入数据csv_writer.writerow(dit)print(dit)for page in range(5):get_content()driver.find_element_by_css_selector('.soupager button:nth-child(7)').click()
可视化代码
import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
df = pd.read_csv('data.csv')
df.head()
pyecharts官方文档链接: https://gallery.pyecharts.org/#/README
info = df['区域'].value_counts().index.to_list()
num = df['区域'].value_counts().to_list()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入配置
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 随机生成数据
from pyecharts.faker import Faker
info = df['区域'].value_counts().index.to_list()
num = df['区域'].value_counts().to_list()
c = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘区域分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存到html文件# .render("上海python招聘区域分布情况.html")
)
print(Faker.choose()) # ['草莓', '芒果', '葡萄', '雪梨', '西瓜', '柠檬', '车厘子']
print(Faker.values()) # [116, 118, 134, 44, 62, 53, 31]
# 展示在jupyter上面
c.load_javascript()
c.render_notebook()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入配置
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 随机生成数据
from pyecharts.faker import Faker
info = df['学历'].value_counts().index.to_list()
num = df['学历'].value_counts().to_list()
c = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘学历分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存到html文件# .render("上海python招聘区域分布情况.html")
)
c.render_notebook()
# 导入配置
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 随机生成数据
from pyecharts.faker import Faker
info = df['经验'].value_counts().index.to_list()
num = df['经验'].value_counts().to_list()
c = (Pie().add("",[list(z)for z in zip(info,num,)],center=["40%", "50%"],).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘经验分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存到html文件# .render("上海python招聘区域分布情况.html")
)
c.render_notebook()
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker
info = df['经验'].value_counts().index.to_list()
num = df['经验'].value_counts().to_list()
c = (Line().add_xaxis(info).add_yaxis("", num, is_smooth=True).set_global_opts(title_opts=opts.TitleOpts(title="上海python招聘经验分布情况"))
)
c.render_notebook()
尾语
最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。