Python3.X登录模拟CSDN,获取文章列表
来源:互联网 发布:十月革命 知乎 编辑:程序博客网 时间:2024/04/28 04:30
目录:
- 本文主要讲用Python模拟CSDN的登录并获取自己文章的列表
- 推荐的两篇文章
- Python模拟登录CSDN
- 获取需要post的参数
- 抓取http请求
- 分析post请求得到参数
- 找到生成post参数的请求和生成方法
- 代码实现
- 获取需要post的参数
- 总结
本文主要讲用Python模拟CSDN的登录,并获取自己文章的列表
- 推荐两篇文章,一篇是模拟新浪微博的登录,一篇是讲解如何在登录时获取需要post的参数(有的网站登录可能用的是get,以前有,现在应该很少很少了)
- 以模拟登录CSDN为例,走一下获取参数的过程
推荐的两篇文章:
- 模拟新浪微博登录
- 讲解如何在登录时候获取需要post的参数
Python模拟登录CSDN:
- 获取需要post的参数,和post的URL
- 找到生成post参数的URL,和生成方法
- 代码实现
获取需要post的参数
- 准备好工具,抓取各种http请求
- 分析post请求,得到参数
抓取http请求
读了第二篇文章应该对抓取各种请求有一定了解了,下面这个图是用IE11抓取到的
分析post请求得到参数
注意那个post请求,这个请求是我们在登录界面输入完用户名、密码后浏览器向服务器做的请求,这个请求里就有我们需要post的参数,双击这个请求看看详细信息,点开‘请求正文’就是我们需要获得的参数
画红线的是我们需要post的参数(‘username’ ‘password’ ‘lt’ ‘execuyion’ ‘_eventId’),绿线的是我们请求的URL,注意绿线的URL里有个 ‘jsessionid’,这个可能也是动态生成的,所以在找生成参数的URL时候把它也带上。知道post哪些参数了,就需要确定这些参数是不是动态生成的(应该大一点的网站都是动态生成的),确定是不是动态生成的办法是,把cookie清除,然后再重新登录,抓取一下,看看这些参数是不是一样。若是动态生成,就要确定这个post之前的哪些请求生成了这些参数的值。
找到生成post参数的请求和生成方法
- 一种方法是直接搜索参数,可以看到上图中有个查找功能,把需要查找的参数放里,往前查找,这种查找有个缺点,很短的参数,会查到很多选项,比如上面的参数’lt’
- 一种是看之前的请求,感觉哪些请求可能是,有选择的看
上面的’lt’我一开始搜索了,得到很多的结果,好多都是没用的,后来用第二种方法找之前抓到的请求,在https://passport.csdn.net/account/login 这个请求返回的html里发现了参数,看下图
可以看到上面的参数都在这里,可以用个正则表达式把这个参数的值匹配出来。多访问几次这个网址,就可以发现每次返回的参数不一样。前面说到还有一个’jsessionid’,这个参数也在这个html里,它是在上面
参数找完了直接实现就可以了,这里没说参数生成的方法,CSDN登录生成的参数在服务器端,它把直接生成好的值给你发过来。而新浪微博的登录(第一篇文章)就有一个参数需要经过加密在本地生成,这样的话就得去分析前面的JavaScript,获得生成的方法。
代码实现
# 以下4行代码说简单点就是让你接下来的所有get和post请求都带上已经获取的cookie,因为稍大些的网站的登陆验证全靠cookiecj = http.cookiejar.LWPCookieJar()cookie_support = urllib.request.HTTPCookieProcessor(cj)opener = urllib.request.build_opener(cookie_support , urllib.request.HTTPHandler)urllib.request.install_opener(opener)def crawl_CSDN(user_name,password): para_url="https://passport.csdn.net/account/login" post_url="https://passport.csdn.net/account/login" user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent ,'Host': 'passport.csdn.net'} request=urllib.request.Request(url=para_url,headers=headers) response=urllib.request.urlopen(request)# 获取包含参数的html data=response.read().decode(errors='ignore')# 获取参数 jsessionid=re.findall('jsessionid=(.*)\"', data, flags=0)[0] lt=re.findall('name="lt" value=\"(.*)\"', data, flags=0)[0] execution=re.findall('name="execution" value=\"(.*)\"', data, flags=0)[0]# 需要提交的参数 parameters={'username':user_name,'password':password,'lt':lt,'execution':execution,'_eventId':'submit'}# 把参数变为指定格式 post_data=urllib.parse.urlencode(parameters).encode(encoding='utf_8', errors='strict') post_url=post_url+';'+jsessionid post_request=urllib.request.Request(post_url,post_data,headers) post_response=urllib.request.urlopen(post_request) print(post_response.read().decode(errors='ignore')) #===========================================================================# print(execution) # print(lt) # print(jsessionid) # print(data) #=========================================================================== print(get('http://write.blog.csdn.net/postlist'))# print(get('http://www.csdn.net'))def get(url): user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent} request=urllib.request.Request(url=url,headers=headers) response=urllib.request.urlopen(request)# 获取包含参数的html data=response.read().decode(errors='ignore') return dataps.代码丑陋,勿怪! 这里并没有把文章的列表匹配出来,只是返回了相应的html,写个正则就OK了。
总结
不写个总结,目录那里底下总感觉缺点啥。模拟登录一个网站一定要知道浏览器和服务器打交道的过程,这样不至于云里雾里,不知道什么地方是重点(尤其对于非计算机专业还没学过计算机网络的学生)。可以学学html,知道一些标签都是干嘛的。学学网络编程,了解下服务器和客户端互相通信的过程。
0 0
- Python3.X登录模拟CSDN,获取文章列表
- Python登录并获取CSDN博客所有文章列表
- 爬虫 登录csdn并获取个人博客文章列表
- python 模拟登录csdn并获取博客列表等操作
- python实例-通过cookie实现登录csdn获取自己微博的文章列表
- python模拟登录csdn并获取首页文章写入MySQL中(二)
- 自动获取CSDN博客文章列表
- Python3爬虫登录模拟
- python3 模拟实现登录HDU并获取Cookie
- 使用Python模拟登录QQ邮箱获取QQ好友列表
- python3模拟登录知乎
- request post 模拟登录 csdn 获取保存cookie
- Python3.X的list列表
- 模拟CSDN登录
- python模拟登录csdn
- Python模拟登录CSDN
- python模拟登录csdn
- python 模拟登录CSDN
- (一)Android布局时资源文件使用
- arduino小车
- 【jQuery】复选框的全选、反选,判断哪些复选框被选中
- poj1990 MooFest
- C#多线程编程实战(从入门到精通系列)第二篇 指定间隔终止线程
- Python3.X登录模拟CSDN,获取文章列表
- c#操作excel全攻略(导入导出) excel表增删改 以及常见问题的处理
- Search-in-Rotated-Sorted-Array
- SVM的两个参数 C 和 gamma
- 年轻父母必知的小儿急救方法
- Search-a-2D-Matrix
- 在IOS应用中打开另外一个应用
- Linux用户管理(2)
- Reverse-Linked-List