这是本人写的第一个爬虫,由于测试的太多了,导致最终已经无法下载数据了,下载会提示error,无任何反反爬机制所以说被封应当是可以理解,因为无法再下载数据,估计要等一段时间,我暂时就把他搁下了,不过也学习到了很多东西,现在将其展示出来,请看官指点,同时也有几个问题没有解决
①:在提交代码的那个网页,不知道填上一段代码过去,本来想填Hello world的,期待以后能够解决把
②:目前还不知道如何处理点击下载,然后自定义路径的问题,不过现在用不断打开浏览器和退出每次设置解决
大致思路:
0.首先利用webdriver调用谷歌浏览器模拟登陆,注意下载的插件需要和谷歌浏览器版本一致
1.登陆完之后,模拟点击进入一个试题列表,然后利用正则表达式筛选出试题链接
2.利用cookies再次调用浏览器,进入试题,利用BeautifulSoup解析源码,然后去掉html格式(上面的小于号不能正常显示,因此也要特殊转码,</div>转换成换行符)
3.模拟点击提交,自动跳转网页后,点击评测详情,再解析网页看有多少组数据,模拟点击下载,之后关闭浏览器
4.存储格式,在LQ文件夹里面存储cookies,不同难度的试题分文件夹存储,题目再建立子文件夹内含题目和评测数据
from selenium import webdriver
from bs4 import BeautifulSoup
import time
import re
import os
# 给与driver, 账号,密码,然后输入相应的验证码即可,返回cookielist,用于后面免验证登陆
def Land(lq, url, login, psw):
lq.get(url)
lq.find_element_by_xpath('//*[@id="xloginbtn"]/img').click()
# 模拟点击登陆
lq.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/input').send_keys(login)
lq.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/input').send_keys(psw)
# 输入信息
flag = True
# 手动输入验证码登入,防止输错,成功登陆时输入0终止输入验证码,其余则继续输入
print('请输入验证码:')
vcode = str(input())
while flag:
lq.find_element_by_xpath('//*[@id="vcode"]').send_keys(vcode)
lq.find_element_by_xpath('//*[@id="loginForm"]/div