Python 爬取CSDN的极客头条

这两周花了点时间读了《Python网络数据采集》,内容不多,不到200页,但是非常丰富,有入门,有提高,有注意事项,有经验之谈,有原理,有分析,读完受益匪浅。书中讲了很多反爬虫、图片验证码之类的东西,不过感谢csdn的开放性,这些都没有。所以第一个练习,就是爬取csdn的极客头条的更新文章。

1、思路

思路比较简单,首先是登录,然后爬取页面的更新文章名称和链接。要注意的一点是,极客头条的列表刷新是动态的,只有页面有滚动条并且往下拉的时候,才会加载新的文章列表。我用竖屏显示器试了下,没有滚动条的情况下,默认显示20条的文章列表,结果不能加载新的文章列表,应该算是bug。

2、准备

通过浏览器的开发人员工具抓包,可以发现极客头条申请新列表的时候URL格式如下:

http://geek.csdn.net/service/news/get_news_list?jsonpcallback=jQuery203014439105321047596_1516862462757&username=[账户名]&from=-&size=20&type=hackernewsv2_new&_=1516862462758

请求参数:

jsonpcallback:

jQuery20302827217349787545_1516863701413 #该参数是jQuery框架自动生成的匿名回调函数的函数名,用于ajax获取数据时的数据处理,看网页源代码,应该是利用getJSON,所以是页面端生成的参数,可以随意填写

username: [账户名]

from:

6:252765 #这个参数代表的是下一次请求文章列表时,文章的起始编号,如果是第一次请求列表,则这里填‘-’(短杠),和上面例子中一样,下次编号会在本次请求返回的JSON数据中携带

size:

20 #本次请求的文章条目数,我试过1000都成功了。。。

type:

hackernewsv2_new #文章类型,类型在首页的“最热 最新 业界”等等那一行小标题,选择的分类不同,这个参数不同,具体抓包可见

_:

1516863701415 #没什么用,就是第一个参数下短杠后面的数字累加,实际测试没有也可以

通过查找资料和抓包,发现csdn的登录还是很简单的,只要用户名密码,不需要验证码等等,抓包可以看到请求参数:

gps:

39.890503,116.431339

username:

[账户名]

password:

[密码] #抓包的话这里是明码,发出去的话应该是加密的

rememberMe:

true #是否记住密码

lt:

LT-448149-vgNusKFi3i7wBRIZUrzCFLDfoDVP34 #这个参数是在登录主页面中的,需要自己解析出来,数值随机,每次登录需要获取

execution:

e3s1 #目前是固定值,和网文对比这个值不同,所以还是每次登录获取的好

_eventId:

submit #固定值,就是代表提交

登录时要注意的是,csdn为了防爬虫,要求HTTP头的User-Agent字段必须是真实的,所以我用了抓包里面真实的浏览器填充的字段,否则会一直登录失败,返回登录页。

通过抓包可以看到,请求文章后,返回的是json数据,其中‘from’自动用于下次请求,‘html’字段就是返回的网页,utf-8编码的Unicode字符串,Python默认用的就是Unicode,所以取出html字段的数据后自动转为了汉字、符号等,然后解析其中的class类型为‘title’的链接,就可以获得文章链接和名称。

3、代码(非常短)

来源:blwinner

链接:http://blog.csdn.net/blwinner/article/details/79161907

《Python人工智能和全栈开发》2018年07月23日即将在北京开课,120天冲击Python年薪30万,改变速约~~~~

*声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

- END -


原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2018-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

Dev-Cpp使用入门教程

今天给大家开始介绍Dev-C++这款编译器的使用方法,由于蓝桥杯竞赛的要求,今天给大家做入门介绍。 ? 下载地址依旧见:C/C++开发编译器等常用工具下载htt...

3294
来自专栏Youngxj

[黑客工具箱]Android手机抓包工具

6.6K4
来自专栏ROBOTEDU

OMRONFZ系列视觉与ABB机器人的通信

ABB与OMRON之间的通信,本例采用以太网TCP无协议模式通信。通过以太网由ABB机器人程序控制ONRON视觉的场景切换,拍照判断及其判断数据的 接收。 ?...

5205

Eclipse的BIRT:使用Design Engine API

假设您已经在名为“customers”的报告设计文件中将表格定义为报告项目。顾名思义,该表格用于显示示例数据库中的所有客户。此外,它还有一个用于按照国家来对项目...

3112
来自专栏张善友的专栏

谷歌发布 AngularJS 1.0,允许扩展HTML语法

谷歌2012年06月15日发布了一个全新的Web模板——AngularJS 1.0。 ? 谷歌称, AngularJS可以让你扩展HTML的语法,以便清晰、简洁...

2285
来自专栏Fundebug

微信小程序开发BUG经验总结

小程序开发越来越热,开发中遇到各种各样的bug,在此总结了一些比较容易掉进去的坑分享给大家。

55412
来自专栏沈唁志

几款常见的PHP模板引擎

3104
来自专栏西枫里博客

JS控制批量选择/取消复选框

场景应用:在后台分页输出查询数据(如文章、评论),往往需要进行批量删除/审核等操作。后端程序需要读取操作的ID集合进行批量处理。而前端批量选择传入ID是最方便的...

1611
来自专栏张戈的专栏

修复WordPress升级4.2外观菜单中显示选项无法点击问题

WordPress 升级 4.2 之后,目前发现存在如下 3 个问题: 有部分主题的前台会产生大量的 404 错误请求(站外资源); 评论表情名称变更导致表情无...

3006
来自专栏向治洪

Mac 高效工作指南

序 很多做开发的程序员,都喜欢用mac,其绚丽的外观,加上手感体验,很适合开发和装逼用。其实除了这些为什么那么多程序员喜欢用mac呢,分析了一下使用mac的好处...

64710

扫码关注云+社区

领取腾讯云代金券