用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() #關閉與數據庫的連接