基于selenium实现的是收集重庆市大数据工程师薪资水平

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

因为boss直聘使用javascript渲染,所以使用传统的request库无法请求到全部的页面源代码,Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些 JavaScript 渲染的页面来说,这种抓取方式非常有效由此本文基于selenium自动化在edge浏览器上实现的,使用mysql数据库进行数据存储,以便进行数据的分析


一、创建mysql数据库

1、想要在使用python上使用mysql,首先需要下载一个包

pip install pymysql

2、创建数据库spiders

import pymysql
db=pymysql.connect(host='localhost',user='root',password='a20020602',port=3306)
##db是链接数据库的连接对象
cursor=db.cursor()#或取mysql的操作游标,执行mysql语句
cursor.execute('create database spiders default character set utf8mb4')#创建一个spiders数据库,默认编码utf-8
db.close()

3、在创建好的spiders数据库中创建scrape_job表,并设置字段属性和主键

#创建表
import pymysql
db=pymysql.connect(host='localhost',user='root',password='a20020602',port=3306,db='spiders')
##db是链接数据库的连接对象
cursor=db.cursor()#或取mysql的操作游标,执行mysql语句
sql='create table scrape_job(job_name varchar(50),job_salary varchar(25),city varchar(25),companny varchar(25))'
cursor.execute(sql)
db.close()

二、使用selenium爬取数据


1、准备工作,导入需要使用的库

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import pymysql

2、使用selenium进行爬取

browser=webdriver.Edge(executable_path='D:/edge_driver/msedgedriver.exe')
browser.get('https://www.zhipin.com/web/geek/job?query=%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%B7%A5%E7%A8%8B%E5%B8%88&city=101040100&page={page}')
total_page=10
#爬取某一页的数据
def scrape_page(page):
    url='https://www.zhipin.com/web/geek/job?query=%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%B7%A5%E7%A8%8B%E5%B8%88&city=101040100&page={page}'.format(page=page)
    browser.get(url)
    time.sleep(10)#由于网页加载需要时间,有可能出现没有加载完就开始执行下一行代码,以至于爬取失败
    job_list=browser.find_elements(By.XPATH,'//ul[@class="job-list-box"]/li')
    for job in job_list:
        job_name=job.find_element(By.CLASS_NAME,'job-name').text#获取工作名称
        job_salary=job.find_element(By.CLASS_NAME,'salary').text#获取薪资
        city=job.find_element(By.CLASS_NAME,'job-area').text#获取工作地点
        company=job.find_element(By.CLASS_NAME,'company-name').text#获取公司名称
        sql='insert into scrape_job(job_name,job_salary,company,city) values(%s,%s,%s,%s);'
        cursor.execute(sql,(job_name, job_salary,company,city))
        db.commit()#必须在数据更新后提交到数据库中,这样数据库中的也修改了
for page in range(1,total_page+1):
    print('page',page,'is scraping')
    scrape_page(page)
    print('page',page,'scraped over')

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值