python3 爬取36氪新闻网页
发布日期:2021-06-28 19:08:22
浏览次数:3
分类:技术文章
本文共 2471 字,大约阅读时间需要 8 分钟。
一个做了反爬的36氪,返回数据恶心,感觉是一堆垃圾。这里只是记录一下爬取过程。
(一)爬取环境
- win10
- python3
- scrapy
(二)爬取过程
(1)入口:搜索
(2)动态js数据加载,查看下一页操作:
(3)返回数据:
(4)请求链接
http://36kr.com/api//search/entity-search?page=4&per_page=40&keyword=机器人&entity_type=post&ts=1532794031142&_=1532848230039
(4)列表页的json数据,id为详情页链接所需标志
(5)详情页数据
抓取内容:
字段:标题,作者,日期,简要,标签,内容
查看源码,数据全在var props所包含的script标签里面
(6)正则获取并将之转为正常的json数据(理由:json文件可以更好的获取某个字段的内容,单纯全用正则截取的话,不好获取或者直接是获取不到)
源码:
# -*- coding: utf-8 -*-# @Time : 2018/7/28 17:13# @Author : 蛇崽# @Email : 643435675@QQ.com 1532773314218# @File : 36kespider.pyimport jsonimport reimport scrapyimport timeclass ke36Spider(scrapy.Spider): name = 'ke36' allowed_domains = ['www.36kr.com'] start_urls = ['https://36kr.com/'] def parse(self, response): print('start parse ------------------------- ') word = '机器人' t = time.time() page = '1' print('t',t) for page in range(1,200): burl = 'http://36kr.com/api//search/entity-search?page={}&per_page=40&keyword={}&entity_type=post'.format(page,word) yield scrapy.Request(burl,callback=self.parse_list,dont_filter=True) def parse_list(self,response): res = response.body.decode('utf-8') # print(res) jdata = json.loads(res) code = jdata['code'] timestamp = jdata['timestamp'] timestamp_rt = jdata['timestamp_rt'] items = jdata['data']['items'] m_id = items[0]['id'] for item in items: m_id = item['id'] b_url = 'http://36kr.com/p/{}.html'.format(str(m_id)) # b_url = 'http://36kr.com/p/5137751.html' yield scrapy.Request(b_url,callback=self.parse_detail,dont_filter=True) def parse_detail(self,response): res = response.body.decode('utf-8') content = re.findall(r'',res) temstr = content[0] minfo = re.findall('\"detailArticle\|post\"\:(.*?)"hotPostsOf30',temstr)[0] print('minfo ----------------------------- ') minfo = minfo.rstrip(',') jdata = json.loads(minfo) print('j'*40) published_at = jdata['published_at'] username = jdata['user']['name'] title = jdata['user']['title'] extraction_tags = jdata['extraction_tags'] content = jdata['content'] print(published_at,username,title,extraction_tags) print('*'*50) print(content)
更多资源请访问:
欢迎光临我的小网站:
陆续优化中,后续会开发更多更好玩的有趣的小工具
转载地址:https://blog.csdn.net/xudailong_blog/article/details/81271675 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月20日 01时23分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【基础+实战】JVM原理及优化系列之四:JVM参数说明
2019-04-29
【基础+实战】JVM原理及优化系列之五:JVM默认设置
2019-04-29
【基础+实战】JVM原理及优化系列之六:JVM主要调优参数
2019-04-29
【基础+实战】JVM原理及优化系列之十:JVM内存泄漏专题实战
2019-04-29
Redis高可用架构 (redis主从+sentinel)
2019-04-29
【重磅推出】性能提升100倍的性能测试监控优化方法
2019-04-29
Spring cloud微服务框架简介
2019-04-29
【实用】Redis各种存储结构使用场景
2019-04-29
【实用】Redis高级功能
2019-04-29
DevOps八荣八耻了解下,哈哈~
2019-04-29
API Gateway(API网关)介绍
2019-04-29
【免费】少儿编程社区,Scratch中文社区,少儿编程学习交流平台上线~~~
2019-04-29
JavaMail关于使用qq企业邮箱发邮件踩过的坑
2019-04-29
log4j2异步发送error日志邮件配置
2019-04-29
redis setnx解决定时任务多节点部署并发问题(分布式锁)
2019-04-29
spring boot使用redis解决session双机问题
2019-04-29
Java Web会话机制,Cookie和Session详解
2019-04-29
基于timestamp和nonce的防止重放攻击方案
2019-04-29
Linux常用基础命令198个
2019-04-29