All Questions
Questions Per Page:
  • 之前我们爬取的网页,多是HTML静态生成的内容,直接从HTML源码中就能找到看到的数据和内容,然而并不是所有的网页都是这样的。 有一些网站的内容由前端的JS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了。比如今日头条: 浏览器呈现的网页是这样的: 查看源码,却是这样的: 网页的新闻在HTML源码中一条都找不到,全是由JS动态生成加载。 遇到这种情况,我们应该如何对网页进行爬取呢?有两种方法: 1、从网页响应中找到JS脚本返回的JSON数据;2、使用Selenium对网页进行模拟访问 在此只对第一种方法作介绍,关于Selenium的使用,后面有专门的一篇。 一、从网页响应中找到JS脚本返回的JSON数据 即使网页内容是由JS动态生成加载的,JS也需要对某个接口进行调用,并根据接口返回的JSON数据再进行加载和渲染。 所以我们可以找到JS调用的数据接口,从数据接口中找到网页中最后呈现的数据。 就以今日头条为例来演示: 1、从找到JS请求的数据接口 F12打开网页调试工具 选择“网络”选项卡后,发现有很多响应,我们筛选一下,只看XHR响应。 (XHR是Ajax中的概念,表示XMLHTTPrequest) 然后我们发现少了很多链接,随便点开一个看看: 我们选择city,预览中有一串json数据: 我们再点开看看: 原来全都是城市的列表,应该是加载地区新闻之用的。 …

    pythongirl Asked on 2017年1月18日 in WEB技术.
    • 1271 views
    • 0 answers
    • 0 votes
  • 我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个动态网站(没有用任何框架)。相比于计算机大牛,我更加知道一个小白将会遇到什么坑,遇到哪些难点。我把我的学习过程写在下面,并附上在每个阶段的学习资料,希望对零基础的Python学习者有所帮助。 注:本文只做经历分享,不是技术探讨。 — 在知乎上常常看到想要转行IT,或者是想学习编程但不知如何开始的朋友。回答这类问题的人往往只是列出书单资源然后给出一个大致的方向。有些朋友一开始就扎入了理论学习的汪洋大海,从苦读类似《算法导论》开始,能够坚持读下来的寥寥无几,学习的积极性也被不断的挫败感消磨的所剩无几。一直以来,编程对我而言是一种「黑魔法」般的存在。今年阿里月饼门,当很多人都参与到是非之争的时候,我更加着迷于程序员区区几行代码的脚本所展现出的威力,对于外行而言,这是超乎他们想象之外的某种能力——为什么我守在电脑面前盯着秒针然后拼命点击鼠标都不一定能抢到的礼物,程序员只需要提前花5分钟写3行代码就轻松搞定? 所以,我的心底深处一直都想变成这样的一位魔法师。今年的8月,刚好工作上想要开发一个基于微信的英语学习网站,借此机会,我决定好好学习一下编程。在此之前,我所有关于程序的知识仅仅来源于两部分,一是本科时期的C语言必修课,现在已经忘的一干二净,不过好歹我从中明白编程是怎么回事;第二部分是大概两年前由于工作关系学的一些Python,不过只是皮毛,现在忘的七七八八。 简单说,我的目标是建立一个网站,不过这个网站是动态的,也就是说它能识别谁登陆,然后对不同的人显示不同的内容。而当时的现实是,我完全不明白网页是如何显示出来的?譬如每个人登陆知乎的时候看到的是定制化的页面,后台是如何基于每个ID来组织出不同的页面的?所有我们看到的问题,回答,参与的评论在背后的服务器上是以一种什么样的形式存在的?又比如为什么有些页面只能在微信端打开,在电脑上就会出错?(不知道你有没有发现这一点) 当时我的心中充满了无数个类似的问号?当然如果你也是小白,一定有着同样的疑问。 好处是一开始就明确了学习的目的:Web建站。所以我的学习方案基本就是通过做项目学习,哪里不懂就解决哪里,边做边学习,不断推进。另外,由于知道很多成功的网站在用Python做服务器开发,比如知乎,所以我就自然选择了Python。 于是我就开始了我充满着挫败感和成就感的编程之路…… 从8月到12月的四个月里,除去本来的工作,为了学习质量,我会保证平均每天4个小时的学习时间,周末也不例外。另外,所有的文档,问答都尽量看英文的,这可以帮你剩下大量的时间。12月13日,我做的网站上线了,3天时间大概有5000人访问了这个网站,我有时在后台看着日志,不免有些心潮喷涌,我想把自己的经验写下来,希望对于那些有心学习编程但无从下手的朋友提供一些帮助和鼓励。 1. 我的自学编程之路 1)基础 刚开始的时候,我对搭建网站一无所知。为了给自己迅速建立一个框架,我在Google上面泡了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,服务器脚本等等知识,不求精通,只是了解每一项技术是干嘛的,另一方面建立起了一个学习的roadmap,这样大概知道做一个Web App需要哪些知识,分别学习的主次顺序。重点推荐两个资源: Python基础知识:Learn Python the Hard Way …

    pythongirl Asked on 2017年1月18日 in WEB技术.
    • 1167 views
    • 0 answers
    • 0 votes
  • Lerther · 8 小时前 之前文章中所介绍的爬虫都是对单个URL进行解析和爬取,url数量少不费时,但是如果我们需要爬取的网页url有成千上万或者更多,那怎么办? 使用for循环对所有的url进行遍历访问? 嗯,想法很好,但是如果url过多,爬取完所有的数据会不会太过于耗时了? 对此我们可以使用并发来对URL进行访问以爬取数据。 一般而言,在单机上我们使用三种并发方式: 多线程(threading) 多进程(multiprocessing) 协程(gevent) 对于以上三种方法的具体概念解释和说明,各位可以自行网上搜索了解,相信会比我解释得清楚,所以在此就不对它们进行解释说明了。 本系列文章有两个重点,一个是实战,一个是入门,既为实战,理论性的东西就描述得比较少;既为入门,所讲述的都是简单易懂易操作的东西,高深的技术还请入门之后自行探索,那样也会成长得更快。 那么下面,开始并发爬取的实战入门,以多进程为例,并发爬取智联招聘的招聘信息。 一、分析URL和页面结构 1、搜索全国范围内职位名包含“Python”的职位招聘 我们不分职业类别、不分行业类别,工作地点选为全国,职位名为“Python”,对招聘信息进行搜索,结果如下图: 我们注意图中三个红框的信息: 搜索结果的url结构;(构造url地址进行for循环遍历) …

    pythongirl Asked on 2017年1月18日 in WEB技术.
    • 1256 views
    • 0 answers
    • 0 votes
  • Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间. 这篇文档介绍了BeautifulSoup4中所有主要特性,并且有小例子.让我来向你展示它适合做什么,如何工作,怎样使用,如何达到你想要的效果,和处理异常情况. 文档中出现的例子在Python2.7和Python3.2中的执行结果相同 你可能在寻找 Beautiful Soup3 的文档,Beautiful Soup 3 目前已经停止开发,我们推荐在现在的项目中使用Beautiful Soup 4, 移植到BS4 这篇帮助文档已经被翻译成了其它语言: 这篇文档当然还有中文版. このページは日本語で利用できます(外部リンク) 이 …

    bs Asked on 2016年12月21日 in WEB技术.
    • 705 views
    • 0 answers
    • 0 votes
  • 阿橙 · 3 个月前 WechatSogou [1]- 微信公众号爬虫。基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典。 DouBanSpider [2]- 豆瓣读书爬虫。可以爬下豆瓣读书标签下的所有图书,按评分排名依次存储,存储到Excel中,可方便大家筛选搜罗,比如筛选评价人数>1000的高分书籍;可依据不同的主题存储到Excel不同的Sheet ,采用User Agent伪装为浏览器进行爬取,并加入随机延时来更好的模仿浏览器行为,避免爬虫被封。 zhihu_spider [3]- 知乎爬虫。此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo bilibili-user [4]- Bilibili用户爬虫。总数据数:20119918,抓取字段:用户id,昵称,性别,头像,等级,经验值,粉丝数,生日,地址,注册时间,签名,等级与经验值等。抓取之后生成B站用户数据报告。 SinaSpider [5]- …

    python Asked on 2016年12月20日 in WEB技术.
    • 1100 views
    • 0 answers
    • 0 votes
  • 由于本学期好多神都选了Cisco网络课, 而我这等弱渣没选, 去蹭了一节发现讲的内容虽然我不懂但是还是无爱. 我想既然都本科就出来工作还是按照自己爱好来点技能吧, 于是我就不去了. 一个人在宿舍没有点计划好的事情做就会很容易虚度, 正好这个学期主打网络与数据库开发, 那就先学学Python开发爬虫吧. 我失散多年的好朋友Jay Loong突然说他会爬虫了, 我感到真棒, 我也要学 😀 因为一个星期有两节Cisco课, 所以本系列博文也就一周两更.   选择一门语言 爬虫可以用各种语言写, C++, Java都可以, …

    cheql Asked on 2016年12月16日 in WEB技术.
    • 1112 views
    • 0 answers
    • 0 votes
  • Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取(更确切来说,网络抓取)所设计的, 也可以应用在获取API所返回的数据(比如Web Services)或者通用的网络爬虫。 Scrapy也能帮你实现高阶的爬虫框架,比如爬取时的网站认证、内容的分析处理、重复抓取、分布式爬取等等很复杂的事。 安装scrapy 我的测试环境是centos6.5 升级python到最新版的2.7,下面的所有步骤都切换到root用户 由于scrapy目前只能运行在python2上,所以先更新centos上面的python到最新的 Python 2.7.11, 具体方法请google下很多这样的教程。 先安装一些依赖软件 yum install python-devel yum install libffi-devel yum …

    Scrapy Asked on 2016年11月7日 in WEB技术.
    • 1167 views
    • 0 answers
    • 0 votes
  • 阅读 370收藏 432016-9-22 原文链接:http://www.jianshu.com/p/d62c2be60617 在你真的会用 Gson 吗? Gson 使用指南(一) 的第三节我介绍了在 Gson 中如何使用泛型来简化我们的类设计,但随之而来引入了一个新的问题:封装。不知道各位有没有想过这样一个问题:每次都要用 new TypeToken(){}; 好麻烦,有没有更好的办法? 有更好的办法么? 当然有!相信也有不少人自己作了尝试,只是有人欢喜有人愁了,不过没关系,今天我们就来解决这个问题。 —— 由 方石剑 …

    zhubj Asked on 2016年9月23日 in WEB技术.
    • 1153 views
    • 0 answers
    • 0 votes
  • 中秋节到了,苦逼程序猿也会还要加班,但是我感觉这还不算苦逼,最苦逼的应该是阿里的那四个小朋友,在这么吉祥的节日中被公司开了,心里真是一肚子苦水,到现在还是懵逼的状态,关于这件事其实很简单,就是因为阿里内部发的月饼没处理完就开启了一个内部抢购平台,无奈正好有四个比较好奇的小朋友就开始使用毕生所学知识为自己争取一些有用的东西,结果就没结果了。 其实从当事人在知乎上解释的来看,貌似这个并不是平台的漏洞导致的,而是本身页面就有这样的问题,下面可以复原一下场景 我们可以先简单的写一个html页面,内部包含一个按钮 “秒杀”:   简单的html代码,不多解释了,下面主要来看一下抢购的js脚本代码:     也是非常简单的,首先找到秒杀的按钮,然后启动一个定时器模拟点击button.click即可。   实验操作很简单,借助Chrome浏览器,打开上面的案例html:     然后按F12快捷键,调出调试页面,在下面文本框中,加上我们上面的js脚本代码,点击回车即可运行:   看到了,这里会定时的运行抢购任务,对话框一直弹出。 这里可以看出来页面本身没有问题,四个小朋友应该也没多大问题,那这里的问题到底是什么?有人说是这四个小朋友运气不好,有人说是阿里公关在做文章,但是不管最后结果如何,我们都是吃瓜群众,而这四个小朋友在这个中秋节过得不知怎么样,或许会给他们留下心理阴影,打死以后不吃月饼!       …

    sourcecode Asked on 2016年9月18日 in WEB技术.
    • 1194 views
    • 0 answers
    • 0 votes
  • 当你发现一个平时占用cpu比较少的进程突然间占用cpu接近100%时,你如何找到导致cpu飙升的原因?我的思路是,首先找到进程正在执行的代码行,从而确定可能有问题的代码段。然后,再仔细分析有问题的代码段,从而找出原因。 如果你的程序使用的是c、c++编写,那么你可以很容易的找到正在执行的代码行。但是,程序是php编写的,如何找到可能有问题的代码行呢?这个问题就是本文要解决的问题。 背景知识: 如果你对c语言不熟悉的话,可以略过,直接看 示例演示。 大家都知道php是一个解释性语言。用户编写的php代码会生成opcode,由解释器引擎去解释执行。在解释执行过程中,有一个全局变量包含了执行过程中用到的各种数据。它就是executor_globals。在源码的Zend/zend_globals.h 文件中可以找到他的类型定义。 struct _zend_executor_globals { zval **return_value_ptr_ptr; zval uninitialized_zval; zval *uninitialized_zval_ptr; zval error_zval; zval *error_zval_ptr; …

    nick Asked on 2016年9月10日 in WEB技术.
    • 1179 views
    • 0 answers
    • 0 votes