python 爬虫的初步实践
时间:2019-10-11
本文章向大家介绍python 爬虫的初步实践,主要包括python 爬虫的初步实践使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简介
我的sisiter,想要我爬一些试题给她。有80套,她不想手工点,所以,我来了,比较简单的网站。所以没有费很大的力气。期间参考了一系列的网站,都没有记录下来。
code
#!/usr/bin/env python
#coding=utf-8
import pdfkit
import time
import requests
import sys
import urllib2
import re
def get_hiddenvalue(url):
request=urllib2.Request(url)
reponse=urllib2.urlopen(request)
resu=reponse.read()
VIEWSTATE=re.findall(r'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />',resu, re.I)
EVENTVALIDATION =re.findall(r'input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />', resu,re.I)
return VIEWSTATE[0],EVENTVALIDATION[0]
def get_hiddenvalue_string(myStr):
VIEWSTATE=re.findall(r'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />',myStr, re.I)
EVENTVALIDATION =re.findall(r'input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />', myStr,re.I)
return VIEWSTATE[0],EVENTVALIDATION[0]
reload(sys)
sys.setdefaultencoding( "utf-8" )
data = {
'cid':'1',
'pid':'5'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
}
options = {
'page-size': 'A4',
'margin-top': '0mm',
'margin-right': '0mm',
'margin-bottom': '0mm',
'margin-left': '0mm',
# 'orientation':'Landscape',#横向
'encoding': "UTF-8",
'no-outline': None,
# 'footer-right':'[page]' 设置页码
}
myMap=["UniversityPsychology","HigherEducationRegulations","HigherEducation","TeacherEthics"]
confg = pdfkit.configuration(wkhtmltopdf='/usr/local/bin/wkhtmltopdf')
for i in range(4):
for j in range(20):
data['cid'] = str(i+1)
data['pid'] = str(j+1)
url='http://zjzx.zjnu.edu.cn/test/Default.aspx?cid='+str(i+1)+'&pid='+str(j+1)
#response = requests.post(url=url,data=data,headers=headers)
myStr = myMap[i]+'_'+'exam'+str(j+1)+'.pdf'
#response.encoding = 'utf-8'
myStr1 = myMap[i]+'_'+'exam'+str(j+1)+'.html'
data['Button1'] = '提交并查看单选题答案'
data['drop1']= '1'
data['drop2']='1'
data['__VIEWSTATE'],data['__EVENTVALIDATION'] = get_hiddenvalue(url) # 请查阅__VIEWSTATE __EVENTVALIDATION 一个是把所有的按键信息编码上传,一个是加密用的
response = requests.post(url=url,data=data,headers=headers)
responseReturn = response.text
time.sleep(3)
del data['Button1']
data['__VIEWSTATE'],data['__EVENTVALIDATION']=get_hiddenvalue_string(responseReturn)
data['Button2']='提交并查看多选题答案'
response = requests.post(url=url,data=data,headers=headers)
responseReturn = response.text
time.sleep(3)
del data['Button2']
data['__VIEWSTATE'],data['__EVENTVALIDATION']=get_hiddenvalue_string(responseReturn)
data['Button3']='提交并查看判断题答案'
response = requests.post(url=url,data=data,headers=headers)
responseReturn = response.text
del data['Button3']
with open(myStr1,'a') as file:
file.write(responseReturn)
with open(myStr1, 'r') as file:
answer = file.read()
pdfkit.from_string(answer, myStr,configuration=confg,options=options)
#pdfkit.from_url(url, myStr,configuration=confg)
原文地址:https://www.cnblogs.com/eat-too-much/p/11655176.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Make/Makefile 简介
- nagios监控安装部署
- Linux内核调优
- pyhon smtplib库 实现插入图片邮件发送
- mysql insert or update与UQ索引
- 矿机排查实战
- SpringBoot 整合 SpringDataRedis
- SpringDataRedis 基本使用
- Spring Security 基础入门
- Spring Security 安全认证
- Spring Security 自定义登录页
- CAS 服务端部署
- Spring Security 权限控制
- vue动态组件的用法
- elementUI中checekBox实现全选和反选以及实现在input中输入空格出现label分割