python3 爬csdn博主详情
经常在csdn上看博文,受益匪浅,然而现在想爬一下csdn的博主信息。
先说一下有关ajax技术:
AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。
- 组成:
基于XHTML和CSS标准的表示;
使用Document Object Model进行动态显示和交互;
使用XML和XSLT做数据交互和操作;
使用XML HttpRequest与服务器进行异步通信;
使用JavaScript绑定一切。
- 描述:
Ajax是结合了Java技术、XML以及JavaScript等编程技术,可以让开发人员构建基于Java技术的Web应用,并打破了使用页面重载的管理。
Ajax技术使用非同步的HTTP请求,在Browser和Web Server之间传递数据,使Browser只更新部分网页内容而不重新载入整个网页。
Ajax是使用客户端脚本与Web服务器交换数据的Web应用开发方法。这样,Web页面不用打断交互流程进行重新加载,就可以动态地更新。使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面
首先我选择的是云计算大数据这一栏的博主,点开这个标签之后拉右侧的下拉框,发现博文在不断的更新。但是按照平常的逻辑来说应该会有一个分页的选项框,或者说在加载的过程中搜索框的url会有规律的改变。但是,并没有。作为新手我也是一头雾水,不知道咋办,然后就f12打开开发者工具选xhr记录ajax请求,看到每一次下拉框拉到最底端的时候都会向服务器发送一个name为‘articles?type=more&category=home&shown_offset=‘开头的ajax请求
看一下这个请求的url,会发现只有shown_offset的值一直在变化,并且这里的shown_offset在上一个同开头名的请求的Response中 ,因此此类请求的网址前后都有联系,只需要第一个原始URL就能构造出接接下来的所有。然而观察发现这个请求的Response里面有我们需要的博文链接,只需要把每个Rseponse中的链接找出来即可
from urllib import request import time from bs4 import BeautifulSoup import re import xlwt import json title = [] # 标题 original = [] # 原创 fans = [] # 粉丝 like = [] # 喜欢 comment = [] # 评论 Visit = [] # 访问 integral = [] # 积分 ranking = [] # 排名 links = []
def get_url(url,count):try:if count <= 0:#爬到指定次数停止returncount = count-1res = url_open(url) articles = json.loads(res)if articles['status']:need_data = articles['articles']if need_data:for item in need_data :htmls = url_open(str(item['url']))content(htmls)last_shown_offset = articles["shown_offset"] # 获取最后一条数据的时间戳if last_shown_offset:time.sleep(1)get_url(START_URL.format(last_shown_offset),count)except Exception as e:print(e)print('"系统暂停60s,当前出问题的是{}".format(url)')time.sleep(5) # 出问题之后,停止60s,继续抓取get_url(url)
def url_open(url):response_link = request.Request(url)cookie_str = '''Cookie: ARK_ID=JSdf38ff03b89606a56defa7a2f7d0b21ddf38; smidV2=20180925162251fdcebd0b484a86c5a091511b942c76cc0082f9060c3483580; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=1788*1*PC_VC; uuid_tt_dd=10_28867322940-1540539857519-396808; _ga=GA1.2.1172807431.1541726935; UM_distinctid=1670cf18fa61eb-0c5655b817ea5-b79183d-100200-1670cf18fa8c3; UN=qq_40821402; ADHOC_MEMBERSHIP_CLIENT_ID1.0=8a7001b5-1d6c-6e21-903a-1b13310ab597; tipShow=true; c_adb=1; dc_session_id=10_1543651026904.982529; SESSION=190cbbd6-402a-42c5-ace5-c3dc09dac940; UserName=qq_40821402; UserInfo=KnRdCMTcfcLyoWsBjzrRu%2FQa1vjgXB6sHGT2sMdhEl8OcmVvPw7aWsd1QsOwFEzyCBBO3NZ%2BVCnjmHcGUX4mntU7aIKnUDMoU4OFKYb5mLxM9yYCB0ctjH00idBHXjfi; UserToken=cf8778f3044c4e03b4426d405e250cc6; UserNick=qq_40821402; AU=2A3; BT=1543752072665; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1543718281,1543718312,1543752022,1543752076; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1543752076; dc_tos=pj3yqg'''response_link.add_header('cookie', cookie_str)response_link.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36')respon = request.urlopen(response_link).read().decode('utf-8', 'ignore')return(respon)def content(html):bs = BeautifulSoup(html, 'lxml')zz = bs.find('a', class_="follow-nickName").get_text()title.append(zz)qq = bs.find('span', class_="count").get_text()original.append(qq)ww = bs.find_all('span', class_="count")[1].get_text()fans.append(ww)ff = bs.find_all('span', class_="count")[2].get_text()like.append(ff)uu = bs.find_all('span', class_="count")[3].get_text()comment.append(uu)pat = ' <dd title="(.*?)">'result1 = re.compile(pat).findall(html)[0]Visit.append(result1)result2 = re.compile(pat).findall(html)[1]integral.append(result2)pat2 = '<dl title="(.*?)">'result3 = re.compile(pat2).findall(html)[0]ranking.append(result3)f = xlwt.Workbook()sheet_csdn = f.add_sheet('csdn数据', cell_overwrite_ok=True)title_text = ['原创', '粉丝', '喜欢', '评论', '访问', '积分', '排名']for i in range(0, len(title_text)):sheet_csdn.write(0, i, title_text[i])for r in range(0, len(title)):sheet_csdn.write(r + 1, 0, title[r])for q in range(0, len(original)):sheet_csdn.write(q + 1, 1, original[q])for e in range(0, len(fans)):sheet_csdn.write(e + 1, 2, fans[e])for t in range(0, len(like)):sheet_csdn.write(t + 1, 3, like[t])for y in range(0, len(comment)):sheet_csdn.write(y + 1, 4, comment[y])for u in range(0, len(Visit)):sheet_csdn.write(u + 1, 5, Visit[u])for c in range(0, len(ranking)):sheet_csdn.write(c + 1, 6, ranking[c])f.save('E:/csdn6.csv')
if __name__ =='__main__':baseUrl = "https://www.csdn.net/nav/"count = 5;category = "cloud"indexHtml = request.urlopen(baseUrl + category).read().decode('utf-8', 'ignore')bs1 = BeautifulSoup(indexHtml, 'lxml')aTag = bs1.find('ul', class_="feedlist_mod cloud")shownOffset = aTag.get('shown-offset')START_URL = "https://www.csdn.net/api/articles?type=more&category=newarticles&shown_offset={}"get_url(START_URL.format(shownOffset), count)
参考博文:https://blog.csdn.net/hihell/article/details/83349665
https://www.cnblogs.com/thomasbc/p/6650119.html
python3 爬csdn博主详情相关推荐
- 用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)
用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了...(附源码) 我们学习编程,在学习的时候,会有想把有用的知识点保存下来,我们可以把知识点的内容爬下来转变成pdf格式 ...
- CSDN博主排行榜上线!
熬过了困苦的黑夜,算法小哥哥终于迎来了黎明的曙光,在与模型的无数次亲密"调戏"之后,模型终于给出了他想要的答案,与此同时,算法小哥哥的发际线又向资深迈进了一步. 就这样,CSDN博 ...
- 解决树莓派鼠标延迟/迟滞问题-转CSDN博主“Deiki”-sunziren
解决树莓派鼠标延迟/迟滞问题-转CSDN博主"Deiki"-sunziren 参考文章: (1)解决树莓派鼠标延迟/迟滞问题-转CSDN博主"Deiki"-su ...
- 【整理自官方公开资料】CSDN博主排名影响因素
我们都知道旧的排名系统是根据积分排名的. 而根据CSDN官方的消息,新的积分系统是在原来积分制的基础上,加上文章的收藏,分享,点赞,评论等数据权重,形成一个新的博客总排名体系. 新排名系统参考的部分指 ...
- 如何增加自己的文章在csdn的曝光量-参考CSDN博主排名更新公告
前言 不知不觉已经在CSDN上3年,但是本人也是刚刚在CSDN上创作文章,成为博主没几天,我看了这几天文章的浏览数据不尽人意,时常开始反思是不是自己的文章不够好.毕竟都是理工科出身,文采水平有限,但是 ...
- csdn 博主排行榜
没有入口,只能自己找入口 csdn 博主排行榜 https://blog.csdn.net/rank/list/total
- 运用爬虫给喜欢的csdn博主刷评论教程(超简单)
每日分享: 人们看起来好像是有选择的,但这其实是一个错觉.只要你的思维及其受制约的模式控制着你的生活,你还会有什么选择?没有. 重要提示:第一天我大概刷了50个评论(用的同一句话,在同一篇文章刷的), ...
- 爬取博主所有文章并保存到本地(.txt版)--python3.6
闲话: 一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份. 正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想 ...
- python爬取文章保存_爬取博主所有文章并保存到本地(.txt版)--python3.6
闲话: 一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份. 正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想 ...
最新文章
- Squid access.log 转发到其他syslog服务器(OSSIM)
- ICCV 2019 开源论文 | 基于元学习和AutoML的模型压缩新方法
- GDCM:gdcm::FilenameGenerator的测试程序
- 关于VS2012连接MySql数据库时无法选择数据源
- 异常作弊– Java 8 Lambdas
- 前端学习(3239):react生命周期setstate流程
- linux 内核入口地址,linux内核的加载地址和入口地址
- shell 使用eval重新计算变量的变量
- Chisel:一款基于HTTP的快速稳定TCPUDP隧道工具
- 价值1000元的微信二维码活码管理系统网站源码分享
- 毕设查重,避免雷区【划重点!!!】
- gitee码云安装和使用教程
- 高德地图JS添加海量点
- Oracle和Mysql的区别
- Android三种姿势带你玩转360度全景图功能
- Android 如何关闭Navigation Bar
- 单向链表—在单向链表的尾部插入一个元素
- bigemap卫星地图下载器的优势
- 高血糖的饮食注意事项
- 有限元——ANSYS求解悬臂梁均布载荷问题
热门文章
- win10打不开oracle,Win10下安装Oracle问题集锦
- 76.qt qml-QianWindow开源炫酷界面框架(支持白色暗黑渐变自定义控件均以适配)
- 18. python虚拟环境
- javase-jdk下载、安装、配置
- mysql8中only_full_group_by与mysql直接解压版本没有my.ini与数据库备份与备份时出错的解决办法
- 数字信号处理实验二:数字语音信号与频谱分析
- 【电机学复习笔记】第三章 直流电机
- MySQL数据库高级篇教程 B站康师傅笔记(持续更新)
- VS Code中如何关闭保存Go语言文件时自动去除未引用包的行为
- word涂改涂掉图片_关于涂改过的借条还有效吗--word范文资料