爬蟲項目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()  #關閉與數據庫的連接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章