Python3爬虫:selenium模拟登录获取cookie提取数据,存入数据库MySQL

selenium模拟登录获取cookie提取数据

  • Python3 爬虫
    • selenium模拟登录获取数据
    • 连接数据库MYSQL
    • 插入数据
    • 定时执行
    • 从模拟登录保存cookie,数据存入数据库,设置定时执行就可以实现自动化抓取数据了。
    • 微信公众号

Python3 爬虫

因为工作需要selenium爬取数据,所以写一下自己的整个流程以及过程中踩过的坑,希望能帮到大家!

selenium模拟登录获取数据

如果不想自动化窗口弹出,添加option就可以实现,因为我是设置定时执行的,所以每次弹出很不方便。

这里遇到的第一个坑,是element定位账号密码输入框的时候一直出现错误,后面发现原来在iframe框架里面,直接定位是不成功的,需要转换并且注明框架对应的名称。

通过selenium的get_cookies得到cookie在转换成json格式保存下来,再通过for循环转换成headers里面cookie一样形式的字符串,就可以直接引用了。
我抓取的网站是json格式的,所以get请求之后就直接转换成json按照字典的规则提取就可以了。
保存数据可以多种形式,我一般是存到数据库,方便保存跟查询。

下面是源码,我都注释好了。

from selenium import webdriver
import time
import json
import datetime
import requests

option=webdriver.ChromeOptions()
option.add_argument('headless') #添加无头浏览
browser = webdriver.Chrome(options=option)
browser.get('登录网址')
time.sleep(5)#设置延时,保证页面加载完成
browser.switch_to.default_content()#元素在iframe框架里直接定位会不成功,先返回主框架再定位到现在的框架
browser.switch_to.frame('alibaba-login-box')#每个iframe框架对应的名称
browser.find_element_by_id('fm-login-id').send_keys('user')#通过element定位输入账号
browser.find_element_by_id('fm-login-password').send_keys('password')#输入密码
browser.find_element_by_class_name('fm-btn').click()#登录按钮
cookie = browser.get_cookies()#获取cookie
jsonCookies = json.dumps(cookie)
#创建文件保存cookie
with open('storeCookie.json','w') as f:
    f.write(jsonCookies)
with open('storeCookie.json','r',encoding='utf-8') as f:
    listCookies=json.loads(f.read())
cookie = [item["name"] + "=" + item["value"] for item in listCookies]
cookiestr = '; '.join(item for item in cookie)#提取成headers的cookie字符串形式
print(cookiestr)
browser.close()
url='抓取数据的网址'
headers={
'cookie':cookiestr,
'user-agent': '自己headers里面的代理'
}
res = requests.get(url,headers=headers)
datas = res.json()

连接数据库MYSQL

import pymysql
db = pymysql.connect(
        user="账号",
        password="密码",
        host="localhost",
        database="数据库名称",
        port=3306,
        charset="utf8")
    # 创建游标
cursor = db.cursor()

插入数据

sql = "insert into table(Column1,Column2,Column3,Column4,Column5) VALUE('%s','%s','%s','%s','%s')"%(Column1,Column2,Column3,Column4,Column5)#后面是导入对应的数据集合
db.ping(reconnect=True)
cursor.execute(sql)
db.commit()
db.close()

定时执行

如果需要脚本定时执行,可以导入threading包,调好时间即可。

从模拟登录保存cookie,数据存入数据库,设置定时执行就可以实现自动化抓取数据了。

微信公众号

你可能感兴趣的:(Python爬虫,Python爬虫)