本来想直接在网页上找入口获取,但是没找到…,发现登陆之后在可以直接通过网页获取数据,所以就改用selenium,数据不难获取,主要是思路…
请求requests 解析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() #关闭与数据库的连接