本文共 1873 字,大约阅读时间需要 6 分钟。
一般情况用户使用浏览器进行登录操作,认证通过后服务器返回给用户一个cookie用来保存登录态。cookie是一些经过加密的键值对,在服务器端解密后能够提取到一些用户信息。cookie值在浏览器中按F12键后,输入密码点击登录后可以查看。如下图所示:
我们首先将浏览器里复制到的cookie字符串进行处理,转化成为Python的字典格式。
然后就是拼接要爬取页面的url字符串
有了爬取页面的url之后,利用requests模块将url和cookie发送给服务端
如果上一步执行顺利的话,s.text事实上已经是登录后网页的源码了。为了方便提取数据,我们引入etree模块,对s.text进行转换,这样就能利用xpath对标签进行精准选择了。
获取标签xpath。chrome浏览器鼠标在目标内容处右键->查看->在高亮源码处右键->copy->xpath。selector.xpath()返回值是一个list,千万要注意呀!
#coding=utf-8 import re import os import timeimport sysimport reimport urllib2import urllibimport requestsimport cookielibfrom lxml import etreereload(sys)sys.setdefaultencoding("utf8")####################################if __name__ == '__main__': cookies = {} raw_cookies = """ # your own cookies here! """ for line in raw_cookies.split(';'): key, value = line.split('=', 1) cookies[key]=value #print cookies for i in range(1, 45): if (i == 1): myurl="http://rs.xidian.edu.cn/home.php?mod=spacecp&ac=plugin&id=bt:history" s = requests.get(myurl, cookies=cookies) selector = etree.HTML(s.text) for j in range(9, 32): with open('1.txt', 'a') as f: f.write(selector.xpath('//*[@id="ct"]/div[1]/div/div[1]/table/tbody/tr['+str(j)+']/td[3]')[0].text+'\r\n') f.close() else : myurl = "http://rs.xidian.edu.cn/home.php?mod=spacecp&ac=plugin&id=bt:history&page="+str(i) s = requests.get(myurl, cookies=cookies) selector = etree.HTML(s.text) for j in range(2, 32): with open('1.txt', 'a') as f: f.write(selector.xpath('//*[@id="ct"]/div[1]/div/div[1]/table/tbody/tr['+str(j)+']/td[3]')[0].text+'\r\n') f.close()
如果过程顺利的话,这时候应该已经在 1.txt 文件里有我们想要的数据了。本文将数据的获取和处理解耦合,至于怎么处理,排成怎样的格式,有太多方法。