python简易爬虫
2017-05-01
昨晚瞎玩了一下把博客搞挂了,反正也没什么东西又重新弄了一下2333
前几天有一门课的网上答题开放了,在百度的协助下还是得到了一个不可描述的分数,题库1k+的题我才懒得背呢。那就就当爬虫入门课吧,以前写过php的简易爬虫,那就换成python了解一下神奇的语言好了。
接下来会简单说说小爬虫的实现过程。
由于第一次写需要登录验证的小爬虫,想了想能不能先在浏览器里登录一下,然后再直接用浏览器的请求头构造header。
url = '****'
post_data = '****'
headers = {
'Host': '****',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Referer': 'http://****/****/homepage/common/index.jsp',
'Cookie': 'JSESSIONID=****37D32FF37BB2631264E23475CE36',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': 1
}
然后戳一下
login = urllib2.Request(url,post_data,headers)
response = urllib2.urlopen(login)
text = response.read(urllib2.urlopen(login))
哇!!果然没用……
开始是觉得浏览器已经登录过了的话,打开一个网页也是登录了的,所以天真的以为浏览器登录过后用浏览器的headers模拟请求也是已经登录的。
看来并不是这样。那就加个登录验证,再保存一下cookie从登录页面跳转。
filename = 'cookie.txt'
# 声明一个MozillaCookieJar对象实例来保存cookie
cookie = cookielib.MozillaCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#用户名、密码
postdata = urllib.urlencode({
"IPT_LOGINUSERNAME":"****",
"IPT_LOGINPASSWORD":"****"
})
loginUrl = '****'
result = opener.open(loginUrl,postdata)
# 保存cookie到cookie.txt
cookie.save(ignore_discard=True, ignore_expires=True)
print cookie
登录过程没问题了……那就请求一下题库再把题目和答案筛选出来就行了,步骤没几步,但是匹配需要的内容折腾了好久,感谢py的BeautifulSoup库,只要两行就搞定了筛选。编码是gbk的,直接用file("out","w+")处理不了,反正py多的是库,加上codecs库后搞定,写起来就是爽~
f = codecs.open('out.txt','w+','gbk')
for i in range(0,****):
id = **** + i*5
str = '%d' %id
no = '%d' %i
aimUrl = '****' + str
result = opener.open(aimUrl)
result = result.read()
soup = BeautifulSoup(result,"lxml")
#匹配题目
question = soup.find(id=re.compile("_content")).get("value")
#匹配出正确答案
answer = soup.select('input[checked]')
f.write(no+"*******************************************************************\n")
f.write(question)
for a in answer:
f.write(a.parent.parent.get_text())
print i
print "\n"
f.close()
反正就完美了,题库一共1435题,百度还好多搜不了。这会儿就美滋滋。
同学们我就帮到这了,方法就这几步,直接要题目也行,等上几天我搞个网站出来玩一玩(挖坑埋自己)。
说好的答题脚本……说好的搞个答题代理网站收集同学们的学号密码走上人生巅峰……
懒的不行……睡了一天又一天……
吐槽一下……怎么写的那么丑啊……