本文正在参加「金石方案 . 分割6万现金大奖」

一.某勾网职位爬取

合计8000组数据.

众所周知,现在反爬机制特别严重,咱们想要爬取一些职位数据是难上加难,所以咱们现在运用selenium模仿真人操作网页爬取这个某勾网的职位。

我选用selenium模仿真人操作网页,运用谷歌和火狐游览器的插件,进行动态的对方针网站进行爬取。 将方针网页存入一个列表中,每个url爬取30页(运用一个30次的循环操作)将里面当前页面的数据提取出来。然后别离调用getData函数(提取方针值存入对应的列表内),得到方针值datalist,然后运用pandas转化完成,存入csv文件里。终究得到如下数据:

最新版可用某勾网职位爬取【selenium爬取】

合计8000条左右数据。

爬虫结构图

最新版可用某勾网职位爬取【selenium爬取】

1.1 selenium的运用

1、爬虫开端,先将需要的模块包导入:

from selenium import webdriver  # 模仿真人操作网页
import pyquery as pq  # 解析网页
import time  # 时刻模块
import os  # 文件模块
import pandas as pd
from selenium.webdriver.chrome.service import Service  # 新增
from selenium.webdriver.common.by import By

2.防止乱码,在py文件的最上面,加入utf-8编码,显现中文。

# coding = utf-8

3.将谷歌的chromedriver的途径写一下,假如没有chromedriver的话,去官网下载一下,下载解压,将chromedriver拖拽到谷歌游览器的目录即可。

service = Service(executable_path='/home/yan/Python/chromeselenium/chromeselenium/chromedriver')

4.官方下载地址:

registry.npmmirror.com/binary.html…

5.其实假如的最新版的selenium。不用下载chromedriver就可以用,模块里会主动下载装备好的。

driver = webdriver.Chrome()

6.来一端测验代码,测验一下:

from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://www.baidu.net/'
driver.get(url)
driver.maximize_window()

7.假如出现以下报错:

最新版可用某勾网职位爬取【selenium爬取】

8.去外面刚刚下载好的chromedriver里,双击脚本,发动服务:

最新版可用某勾网职位爬取【selenium爬取】

出现以下界面,说明发动成功:

最新版可用某勾网职位爬取【selenium爬取】

9.重新运转刚刚那段测验代码,假如仍是无法发动,替换火狐游览器即可解决问题,火狐游览器测验代码:

import time
from selenium.webdriver import Firefox
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.toutiao.com/a6969138023774667264/")
time.sleep(2)
html = driver.page_source
print(html)
driver.quit()

效果图:

最新版可用某勾网职位爬取【selenium爬取】

1,2 开端爬取

1.运用selenium模仿真人操作网页(谷歌为例)。方针url

lagou_http = "https://www.lagou.com/jobs/list_go%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput="
driver.get(lagou_http)
data = []

2.每个url爬取30页:以下一页按钮的class为准:.pager_next ,然后进行调用函数,data处理数据:

index = 0
while index < 31:
    if index<1:
        time.sleep(30)
    index += 1
    next_button = driver.find_element(By.CSS_SELECTOR, ".pager_next ").get_attribute('class')
    print(next_button)
    if next_button == "pager_next ":
        # 获取当前页面的数据
        items = pq.PyQuery(driver.page_source).find(".con_list_item")
        # print('items',items)
        data += getData(items)
        time.sleep(2)
        # driver.find_element_by_xpath("")
        element = driver.find_element(By.XPATH, "//span[@action='next']").click()
        time.sleep(2)
    else:
        print("爬取完毕")
        break

3.getData 函数的效果,将上面拿到的前页面的数据里将咱们需要的方针数据拿到,放到list列表里返回。

def getData(items):

4.咱们抓取这些关键字:职位名,薪资,公司名,行业,公司融资/上市状况,人数规模,工作年限,学历,城市

x.append(item.attr("data-positionname"))
x.append(item.attr("data-salary"))
x.append(item.attr('data-company'))
x.append(pq.PyQuery(item).find(".industry").text())
x.append(pq.PyQuery(item).find(".p_bot>.li_b_l").remove(".money").text())
x.append((pq.PyQuery(item).find(".add").text()))

4.最终将获取到的数据保存到csv文件中

f = open('D-3-Go岗.csv','w',encoding='utf-8')
name=["职位名","薪资",'公司名','公司描绘','工作经历',"地点"]
test=pd.DataFrame(columns=name,data=data)
# csv_writer = csv.writer(test)
print(test)
test.to_csv('D-3-Go岗.csv',encoding='utf-8')
print('写入文件成功')

5.爬取部分成果如下:

最新版可用某勾网职位爬取【selenium爬取】

6,可以看到如下的数据仍是比较规整的:

(成都)Java工程师-周末双休-专科民教网勿扰,11k-18k,联龙博通,科技金融 , 不需要融资 , 2000人以上,经历3-5年,本科,成都 (杭州)Java工程师-周末双休,13k-21k,联龙博通,科技金融 , 不需要融资 , 2000人以上,经历5-10年,本科,杭州 .net开发工程师-HK,11k-16k,普华永道成都SDC,专业服务|咨询 , 不需要融资 , 2000人以上,经历3-5年,本科,成都 .net开发工程师(转Java),18k-35k,红途科技,信息安全 , A轮 , 50-150人,经历3-5年,本科,深圳 .NET开发架构师,15k-20k,欧派,寓居服务 , 上市公司 , 2000人以上,经历5-10年,本科,广州 .NET开发架构师,15k-20k,欧派,寓居服务 , 上市公司 , 2000人以上,经历5-10年,本科,杭州 .net高档开发工程师,25k-35k,上海元聚,东西类产品 , 不需要融资 , 150-500人,经历5-10年,本科,上海

7.一共爬取的数据类型有:

最新版可用某勾网职位爬取【selenium爬取】

合计8000组数据.