前提、
1. 在这里我使用的是requests爬虫,因为题目过多所以,selenium的效率十分的低;
2. 这是一个异步请求,请认真的分析参数,不要以为这个很简单,否则你会掉进坑
坑和解析:
1.学会伪装:同一个IP和用户,大概请求250题目左右便会被封,推荐使用注册多个用户,保存cookie,做一个变量池,每请求一段时间更换头信息
2.地址参数分析:r,是一个1以内的随机浮点数,我为了找这个参数花了很长的时间,最后发现无用,id,参数是一个html页面一个JavaScript变量数组;
3.请注意分析lx.JS文件,你会发现上面题目的数组,被复制一份加入到一个list里面,再复制一份数组计入里面并且没有打乱,这一块请注意去重,使用正则匹配
4.返回的参数,图片底层做了映射,这一块,我简单的处理了,把所有名字后缀改为jpg,事实证明这个方法很有效
期望:
1.你开一个VIP,保存cookie,把里面的付费题目也爬下来吧,
2.为了一个更好的,请你找找JS,做到图片自动映射,我这个只能下载出JPG文件,如果遇到GIF文件便会下载不了,事实证明极少数题目是GIF文件
3.聊了这么久,请关注一下我的博客吧(感谢,应该会对你有用):https://blog.csdn.net/qq_41259576
源码:
- 不出意外的话复制皆可用
import pymysql
class SaveMysqlDate(object):
'''控制变量区,如果需要自己参数请指定,'''
def __init__(self,items,host='自己的IP',port=3306,user='自己的数据库',passwd='自己的密码',db='自己的数据库',charset='utf8'):
self.__conn=pymysql.connect(host=host,port=port,user=user,passwd=passwd,db=db,charset=charset)
self.__cur=self.__conn.cursor()
self.__flag=set([True])
self.__mysqlControl(items)
'''储存控制区'''
def __mysqlControl(self,items):
try:
self.dataPraise(items)
self.__dataisNeedRollback()
except Exception as e:
print(e)
'''数据回滚区'''
def __dataisNeedRollback(self):
try:
if False in self.__flag:
self.__conn.rollback()
self.__conn.close()
print('完整数据缺损,数据进行回滚,请检查!!!')
else:
self.__conn.commit()
self.__conn.close()
except Exception as e:
print(e)
self.__conn.close()
'''数据插入区'''
def insertList(self,sql,params):
try:
self.__cur.executemany(sql,params)
self.__flag.add(True)
except Exception as e:
print(e)
self.__flag.add(False)
'''自定数据分析区'&