爬虫项目5[爬取拉钩网招聘数据]

用selenium接管浏览器,来规避检测

本来想直接在网页上找入口获取,但是没找到…,发现登陆之后在可以直接通过网页获取数据,所以就改用selenium,数据不难获取,主要是思路…
请求requests 解析selenium


重点:selenium接管浏览器


#chrome版本和chromedriver版本一定要一样
#chrome版本和chromedriver版本一定要一样
#chrome版本和chromedriver版本一定要一样(切记)

chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"    #指定端口打开浏览器

#接管指定端口的浏览器
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# chrome_driver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
# 添加了环境变量可以不用这一步
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("https://www.baidu.com")  #可以通过打开百度测试一下

通过selenium来抓取数据,不用写复杂的请求头,不用模拟登录,比较方便,但是性能不太好
代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import pymysql

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# chrome_driver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
# 添加了环境变量可以不用这一步
browser = webdriver.Chrome(chrome_options=chrome_options)


def get_data():  #获取页面数据
    company_names = browser.find_elements_by_xpath(".//div[@class='company_name']/a")  # 公司名称
    company_ins = browser.find_elements_by_xpath(".//div[@class='industry']")  # 公司简介
    salary = browser.find_elements_by_xpath(".//div[@class='li_b_l']/span[@class='money']")  # 薪水
    demand = browser.find_elements_by_xpath(".//div[@class='list_item_top']//div[@class='li_b_l']")  # 需求
    slogan = browser.find_elements_by_xpath(".//div[@class='li_b_r']")  # 口号
    return company_names, company_ins, salary, demand, slogan


def enter_next():  #进入下一页
    try:
        next = browser.find_element_by_xpath(".//a[text()='下一页']")
    except:
        next = None
    return next

#连接本地数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="yhr104653", database="spiderinfo",
                       charset="utf8")
cursor = conn.cursor()

if __name__ == "__main__":
    get_data()
    while 1:
        next = enter_next()
        if next:
            next.click()
            time.sleep(10)  # 我网速比较慢,所以沉睡时间长一点
            company_names, company_ins, salary, demand, slogan = get_data()
            for i in range(len(company_names)):
                name = company_names[i].text
                ins = company_ins[i].text
                salary = salary[i].text
                demand = demand[i].text
                slogan = slogan[i].text

            cursor.execute("insert into lagou(company_name,company_ins,salary,demand,slogan) values(%s,%s,%s,%s,%s)",
                           (name, ins, salary, demand, slogan))   #向数据库中插入数据
            conn.commit()

        else:
            break
    cursor.close()
    conn.close()  #关闭与数据库的连接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章