Python 爬虫练习:爬取 CSDN 极客的更新文章_python 爬取 csdn 的文章

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’的链接,就可以获得文章链接和名称。

代码(非常短)

"" 
请求geek头条的文章列表 
1 登录csdn 
2 打开极客头条 
3 请求头条文件列表和链接 
4 解析出文章名称和链接 
"""  
# 更多Python视频、源码、资料加群683380553免费获取
import requests  
from bs4 import BeautifulSoup  
import time  
import json  
  
  
def login_csdn(session):  
    """ 
    登录CSDN 
    :return:TRUE 成功 FALSE 识别 
    """  
    page_login = session.get('https://passport.csdn.net/account/login')  
    bsObj = BeautifulSoup(page_login.content, 'lxml')  
    eventID = bsObj.find('input', {'name': '_eventID'})  
    lt = bsObj.find('input', {'name': 'lt'})  
    execution = bsObj.find('input', {'name': 'execution'})  
    params = { 'eventID': eventID, 'lt': lt, 'execution': execution,  
               'username': '', 'password': '', }  
    headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}  
    time.sleep(1)  
    page_login_succ = session.post('https://passport.csdn.net/account/verify', params=params, headers=headers)  
    if page_login_succ.status_code == 200:  
        print('login csdn success ~~~')  
        return True  
    else:  
        print('login csdn failed: ' + page_login_succ.status_code)  
        return False  
  
def open_geek(session):  
    """ 


现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。



分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

![](https://img-blog.csdnimg.cn/img_convert/21b2604bd33c4b6713f686ddd3fe5aff.png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值