爬取51job职位信息

今天在爬职位信息的时候,先用的requests模块,后来发现,获取的数据全部是乱码。果断换成selenium+Chrome,成功获取数据,保存MongoDB

在前期校验获取成果时,建议用selenium+Chrome,后期测试通过,换成无界面的PhantomJS

代码如下:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
# from config import *
import pymongo

browser = webdriver.Chrome('/home/worker/Desktop/driver/chromedriver')
wait = WebDriverWait(browser, 10)
browser.set_window_size(1400, 900)
# 连接数据库
client = pymongo.MongoClient('127.0.0.1', 27017)
# 定义数据库名称
db = client.Job
# 定义表名
coll = db.job
for i in range(1,101):


browser.get('https://search.51job.com/list/020000,000000,0000,00,9,99,Python,2,{}.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=4&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='.format(i))
    wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '#resultList > div'))
    )
    html = browser.page_source
    # print(html)
    doc = pq(html)

    #siblings,在兄弟元素中找('.el')的元素
    items = doc('#resultList .title').siblings('.el').items()

    #当获取数据时,有的字段有数据有的没有,把获取数据之前的页面保存,比对
    # with open('./html.html','w') as f:
    #     f.write(html)
    for item in items:
    # for row in rows:
        Job={}
    
        # Job['job_name']=item.find('a').eq(0).text(),
        # eq(0),想得到第一个标签内的内容
        Job['job_name']=item.find('.t1').eq(0).text()   
        Job['com_name']=item.find('.t2').text()
        Job['addr']=item.find('.t3').text() 
        try:
            Job['job_money']=item.find('.t4').text()
        except:
            Job['job_money']=None
        Job['job_time']=item.find('.t5').text()
        # time.sleep(0.1)
        # print(Job['job_name'])
        # print(Job['com_name'])
        coll.insert(Job)

        # print(Job)



好的,以下是爬取51job网站职位信息并绘图的步骤: 1. 确定要爬取职位和地区,以及需要的数据字段。可以使用Python中的requests、beautifulsoup4等库进行网页解析和爬取。 2. 通过分析网页结构,确定要爬取的数据在哪个标签中,例如可以使用BeautifulSoup库中的find_all方法找到所有职位信息所在的标签。 3. 将爬取到的数据存储到本地文件或数据库中,可以使用Python中的csv、pandas等库进行数据处理和存储。 4. 对爬取到的数据进行分析和绘图,可以使用Python中的matplotlib、seaborn等库进行数据可视化。 以下是一个简单的示例代码,用于爬取51job网站上的Python职位信息并绘制饼图: ```python import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt # 设置请求头,模拟浏览器访问 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 构造请求url url = 'https://search.51job.com/list/010000,000000,0000,00,9,99,Python,2,{}.html' # 循环爬取所有页面的职位信息 data = [] for i in range(1, 6): res = requests.get(url.format(i), headers=headers) soup = BeautifulSoup(res.text, 'html.parser') job_list = soup.find_all('div', class_='el') for job in job_list: job_name = job.find('a', target='_blank').text.strip() company_name = job.find('span', class_='t2').text.strip() salary = job.find('span', class_='t4').text.strip() if salary == '面议': continue data.append({'job_name': job_name, 'company_name': company_name, 'salary': salary}) # 将爬取到的数据存储到本地文件中 df = pd.DataFrame(data) df.to_csv('jobs.csv', index=False) # 对爬取到的数据进行分析和绘图 df = pd.read_csv('jobs.csv') df['salary'] = df['salary'].apply(lambda x: int(x.split('-')[0])) df['salary_range'] = pd.cut(df['salary'], [0, 5000, 10000, 15000, 20000, 30000, 50000, 100000]) salary_count = df['salary_range'].value_counts() plt.pie(salary_count, labels=salary_count.index, autopct='%1.1f%%') plt.title('Python职位薪资分布') plt.show() ``` 这段代码会爬取前5页的Python职位信息,并将职位名称、公司名称和薪资存储到本地文件中。然后,对薪资进行分段处理,统计每个薪资段的职位数量,并绘制饼图展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值