爬取36kr网站的经历

虽然之前老是听同学提起网络爬虫,但是自己一直没有尝试过。这次因为项目需要,我也开始了爬虫之旅。跌跌撞撞,特此记录,希望能够帮助到一些人,也是对自己的一个总结提高。


设计到的知识

  1. 前端相关的知识:HTML,JavaScript。要能看得懂HTML代码,会分析网页是如何生成的。
  2. 使用的语言:Python
  3. 使用的框架:scrapy
  4. 会写正则表达式,能从HTML文本中提取出自己需要的文本内容。

任务及解决思路

1.任务:
抓取36kr官网上的新闻:http://36kr.com/news。
2.解决思路:
两级爬取:
(1)从http://36kr.com/news上,把新闻列表中的每个新闻的title,link,date,desc(简单描述)爬取出来。
(2)对于上面的每个新闻,按照url,爬取保存新闻的内容。

爬虫过程

刚开始我自己搜到了一个简单的爬虫程序,代码如下所示。它爬取了hao123的门户网站,并且能够寻找超链接,一直爬下去,通过它,我对爬虫有了初步的了解。代码黏贴!!!!!
在此基础上,我决定使用scrapy框架实现我的爬虫。在框架之上,比较容易维护,开发。所以,我安装了scrapy(见资料共享1),并且运行了几个实例(见资料共享2),把scrapy的原理差不多搞通啦。
接下来,我修改了一下实例代码,试图爬取36kr网站新闻。但是始终都爬取不到数据。输出response.body,是有内容的,但是后面提取标题等具体信息是都是空的list。请教同学才知道,因为36kr官网的网页是动态生成的,它前端采用了react 渲染技术,模板与数据相分离,并不像传统的静态网页一样。需要特别分析它,才能想办法爬取到。
因为我只懂一点HTML,不懂JavaScript,ajax这些动态网页前端技术,抓取动态生成的网页花费了我几天的时间。后来解决的思路是:先使用chrome的开发者工具(网页上右键:审查代码),然后点击Network,点击XHR,通过它可以查看,当你进入某个网页(或者网页中的某个子标题)时,是否有ajax请求,如果有的话,它会列出具体的请求网址。找到这个网址,就可以进行抓取。
通过分析,36kr的新闻列表,是ajax动态生成的,它其实是通过(完善)*这个url得到的,打开后,发现,它本身是一个json数据格式的文件。这样,直接拿到这个url进行爬取,并处理这个json数据,提取需要的信息即可。分析这个url发现,??????(完善)代表各个栏目的标号,而“最新文章”里的文章是包含了“明星公司”,“早期项目”,“深度报道”,“技能GET”,“行业研究”。所以,我们只需从最新文章中即可拿到所有的新闻。

对于具体的每个新闻的content页,发现,每个新闻的url,例如http://36kr.com/p/5053953.html ,前面的都一样,后面的是*id,而且,最新的新闻的id号最大,若依次递减,进行访问,那么就可以把所有的新闻内容页爬取到啦。

资料共享

1.安装scapy:
http://www.cnblogs.com/QuDump/p/3750447.html
2.scrapy简单使用(能跑通):
http://blog.csdn.net/u012150179/article/details/32343635
http://blog.csdn.net/zq602316498/article/details/37967503
3.爬取36kr官网之新闻页爬取第一层代码:爬取保存文章的title,date,link,desc(简单描述)
4.爬取36kr官网之新闻页爬取第二层代码:爬取保存文章的具体content。

反思与提高

1.Python中各种类型,特别容易出现错误。可以print type(),查看类型,然后解决问题。
2.中文编码(乱码)的问题:
http://www.68idc.cn/help/jiabenmake/python/20150227234550.html
3.正则表达式有一个在线测试(useful):
http://tool.oschina.net/regex
4.使用chrome开发者工具(Ctrl+shift+i)查看网页的进行代码审查,分析网页是动态网页,还是动态生成的;对于静态网页,比较简单。直接将地址栏中的网址抓取,提取相应标签即可。对于动态网页,直接按照网址栏里的网址抓取是抓不到内容的。需要查看ajax请求,找到,动态请求的地址,用这个地址来进行抓取,才能拿到数据。
5.chrome的xpath helper插件,帮助你正确书写xpath,提取相应的标签。(安装后,ctrl+shift+x启动,在相应的内容上,按住shift,helper框里就会显示它的xpath)

代码块

代码块语法遵循标准markdown代码,例如:

我的代码:

爬虫(爬取36kr新闻)(未完成)相关推荐

  1. python爬虫爬取网页新闻标题-看完保证你会

    python爬虫爬取网页新闻标题方法 1.首先使用浏览自带的工具--检查,查找网页新闻标题对应的元素位置,这里查到的新闻标题是在 h3 标签中 2.然后使用编辑器编写python代码 2.1方法一: ...

  2. python爬网易新闻_爬虫基本介绍 python3 爬虫爬取网易新闻排行榜

    爬虫基本介绍 1. 什么是爬虫? 爬虫是请求⽹网站并提取数据的⾃自动化程序 2. 爬虫的基本流程 发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers ...

  3. Python爬虫——爬取博物馆新闻 + 情感倾向分析 + 导入数据库

    一.环境 windows10 python3.7 mysql8(本地+阿里云) 二.出现的问题及注意事项 这是一个小组任务,而且对于每个人来说都是全新的知识,但是在前期没有充分沟通学习方式,导致大家各 ...

  4. 使用python爬虫爬取百度新闻,告诉你社会热点话题

    1.网络爬虫基础使用 (1)urllib介绍: urllib中包括了四个模块,包括: urllib.request:可以用来发送request和获取request的结果 urllib.error:包含 ...

  5. 用Python爬虫爬取澎湃新闻【动态网页:Ajax 动态请求、异步刷新生成数据】的搜索结果(附代码讲解与整套代码)

    一.准备工作 1.本段代码要用到Python中的selenium模块,需要提前进行加载.主要加载方式是在Python中的命令行中输入 pip install selenium. 注:当直接用 pip ...

  6. python 爬虫爬取网易新闻 网易排行榜

    爬取新浪新闻的链接: https://blog.csdn.net/Iv_zzy/article/details/107535041 爬取中国新闻网的链接 https://blog.csdn.net/I ...

  7. python-关于爬虫爬取36kr数据

    import json import requests import re class Kr36(object):     def __init__(self):         # 利用首页     ...

  8. php爬虫爬取校园新闻,python爬虫获取校园网新闻

    现在我们需要获取上图红色框框的数据并输出 下面我们打开浏览器的开发模式并定位到相应的代码 不难发现,学校要闻只显示5条信息 下面我们就开始写程序 # -*- coding:utf-8 -*- impo ...

  9. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

最新文章

  1. NLP中对困惑度感到困惑?
  2. Struts2.3,s:iterator,c:forEach遍历map中的list集合
  3. JQuery元素操小结
  4. Vue「六」前端路由、vue-router
  5. 7-3 服务器统一出错处理
  6. 编程游戏:划拳机器人比赛-{ 咱们园子是否应该设立一个算法挑战/编程竞赛的平台? }...
  7. IDENTITY_INSERT 设置为 OFF
  8. uni-app 开发微信小程序,网络断开,无网络情况,刷新检查,重新加载
  9. RabbitMQ-彻底删除服务
  10. 全新三维成像技术:我们离科幻故事里的立体投影又近了一步
  11. 2017年中兴算法大赛 迪杰特斯拉派
  12. labview非线性曲线拟合Lorenz拟合
  13. KO88冲销内部订单结算的操作参考
  14. C# 读写Excel
  15. 用ps制作一张复仇者联盟海报
  16. 《The C Programming Language》答案(第一章)
  17. ESP8266-Arduino编程实例-PCF8563实时时钟(RTC)驱动
  18. 【励志】如何有技巧地自律
  19. 什么是有源(AON)和无源(PON)光网络?
  20. PicGO搭配vika,好用的图床

热门文章

  1. 智能化软件开发沙龙优秀学者报告·第1期PPT分享(张天翼 普渡大学)
  2. 股票金融K线图控件AnyStock详细介绍教程
  3. 2022年,开源社最亮的星
  4. 简析NFT交易平台的发展历程及4F评估模型
  5. mysql设计架构_MySQL设计架构
  6. 单相交流电机为什么需要电容才能正常启动?
  7. error creating overlay mount to /var/lib/docker/overlay2
  8. java view刷新_java – 如何调用onCreateView方法或刷新我的片段?
  9. LeetCode 365. 水壶问题
  10. 8880 e7 v2配什么主板_Xeon E7 v2系列21款产品详解_Intel服务器CPU_服务器评测与技术-中关村在线...