爬虫

使用scrapy的定制爬虫-第三章-爬虫的javascript支持

老子叫甜甜 提交于 2019-11-30 04:17:50
-.-编辑中.我语文是数学老师教的... 后续补充参考代码,链接. 很多网站都使用javascript...网页内容由js动态生成,一些js事件触发的页面内容变化,链接打开.甚至有些网站在没有js的情况下根本不工作,取而代之返回你一条类似"请打开浏览器js"之类的内容. 对javascript的支持有四种解决方案: 1,写代码模拟相关js逻辑. 2,调用一个有界面的浏览器,类似各种广泛用于测试的,selenium这类. 3,使用一个无界面的浏览器,各种基于webkit的,casperjs,phantomjs等等. 4,结合一个js执行引擎,自己实现一个轻量级的浏览器.难度很大. 对于简单的有限爬取任务,若可以通过代码模拟js逻辑,首选这种方案,例如,在duckduckgo搜索引擎中,翻页这个动作是靠js触发的.模拟似乎还是很难,然后我注意到他页面的第二个form,似乎submit后就可以翻页,试了一下果然如此. 在写代码模拟相关js逻辑时,首先试下关闭浏览器的js,看下是否能获取到需要的东西.有些页面提供了没有js的兼容.不行再开chrome的控制台或firebug观察js逻辑,可能是ajax这类收发包.用urllib2(推荐requests库)模拟即可,也可能是修改dom之类,用lxml这类对应修改即可.说来就是js执行了什么,就用python代码对应模拟执行.

使用scrapy的定制爬虫-第一章-前言

自古美人都是妖i 提交于 2019-11-29 13:04:12
这个系列文章还在逐步完成中,可能会多次编辑 这是一个系列文章,关于定制爬虫,使用scrapy. 这是前言. 爬虫,最广为所知用途是搜索引擎的网页抓取.也有很多其他的用途. 诸如各类比价网站(etao,惠惠购物助手等),信息聚合,采集站等等.这种爬虫不像通用的搜索引擎爬虫,他们往往有各自的目的,例如比价网站,其爬虫周期性的从网上获取物品的价格信息.信息聚合站点将一类信息通过爬虫采集后呈现. 在几年前比价这个概念还不像现在这样广泛时,我在一个群里听人说及他正在开发一个购物比价的产品.想着这难度还是不小的.不确定那时是否有各类成熟的框架或示例供参考.他要实现一个下载调度,解析内容,爬取策略,等等等等.实际上我当时感觉,最大的难点在于,被爬取网站每改版一次,他的解析器就得重写一次,非常麻烦.但实际上网站的改版不会如此频繁,解析内容部分对应修改即可.略惊讶的是,比价这个概念,在2000年左右就有了(如果没记错我是在http权威指南的某部分看到的). 最近我玩了一下爬虫.在此之前,我对http,web相关规范,web自动化(用于测试,我用这个来写web机器人.)也有一定了解. 在这个过程中遇到了一系列的问题.包括 1,javascript动态生成内容处理. 2,html,http等相关规范及细节问题. 3,调度,效率等. 4,大规模爬取相关... etc... 这个系列文章将涉及这些问题

运行nutch报错:unzipBestEffort returned null

☆樱花仙子☆ 提交于 2019-11-29 09:05:12
报错信息: fetch of http://szs.mof.gov.cn/zhengwuxinxi/zhengcefabu/201402/t20140224_1046354.html failed with: java.io.IOException: unzipBestEffort returned null 完整的报错信息为: 2014-03-12 16:48:38,031 ERROR http.Http - Failed to get protocol output java.io.IOException: unzipBestEffort returned null at org.apache.nutch.protocol.http.api.HttpBase.processGzipEncoded(HttpBase.java:317) at org.apache.nutch.protocol.http.HttpResponse.<init>(HttpResponse.java:164) at org.apache.nutch.protocol.http.Http.getResponse(Http.java:64) at org.apache.nutch.protocol.http.api.HttpBase.getProtocolOutput(HttpBase.java:140)

Python读取PDF内容

只愿长相守 提交于 2019-11-29 05:34:48
1,引言 晚上翻看《Python网络数据采集》这本书,看到读取PDF内容的代码,想起来前几天 集搜客 刚刚发布了一个 抓取网页pdf内容的抓取规则 ,这个规则能够把pdf内容当成html来做网页抓取。神奇之处要归功于Firefox解析PDF的能力,能够把pdf格式转换成html标签,比如,div之类的标签,从而用GooSeeker网页抓取软件像抓普通网页一样抓取结构化内容。 从而产生了一个问题:用Python爬虫的话,能做到什么程度。下面将讲述一个实验过程和源代码。 2,把pdf转换成文本的Python源代码 下面的python源代码,读取pdf文件内容(互联网上的或是本地的),转换成文本,打印出来。这段代码主要用了一个第三方库 PDFMiner3K 把PDF读成字符串,然后用StringIO转换成文件对象。(源代码下载地址参看文章末尾的GitHub源) from urllib.request import urlopen from pdfminer.pdfinterp import PDFResourceManager, process_pdf from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from io import StringIO from io

Scrapy的架构初探

安稳与你 提交于 2019-11-29 03:22:49
Scrapy,Python开发的一个web抓取框架。 ### 1,引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库。单纯的开放源代码并不是开源的全部,开源的核心是“开放的思想”,聚合最好的想法、技术、人员,所以将会参照众多领先产品,比如,Scrapy,ScrapingHub,Import.io等。 本文简单讲解一下Scrapy的架构。没错, 通用提取器gsExtractor 就是要集成到Scrapy架构中。 请注意,本文不想复述原文内容,而是为了开源Python爬虫的发展方向找参照,而且以9年来开发网络爬虫经验作为对标,从而本文含有不少笔者主观评述,如果想读Scrapy官方原文,请点击 Scrapy官网的Architecture 。 ### 2,Scrapy架构图 Spiders就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。使用Scrapy创建一个爬虫工程的时候,就会生成一个Spider架子,只需往里面填写代码,按照它的运行模式填写,就能融入Scrapy整体的数据流中。GooSeeker开源网络爬虫的目标是节省下程序员一半以上的时间,关键就是提高Spider的定义和测试速度,解决方案参看《 1分钟快速生成网页内容提取器 》,让整个Scrapy爬虫系统实现快速定制的目标。 ### 3,Scrapy的数据流(Data Flow)

网络爬虫面临的挑战 之 链接构造

雨燕双飞 提交于 2019-11-28 14:01:22
爬虫 与 反爬虫 就好像是安全领域的破解与反破解一样,相互矛盾,相互克制,同时也相互促进。 网站的构建技术从简单的 静态网站 发展到 动态网站 ,信息的传递从用户 单向接收 发展到 双向交互 ,内容的产生从站长 集中生成 发展到 全民参与生成 。 Web技术的发展对 网络爬虫 构成了极大的 挑战 ,我们以 Nutch 为例来说明难在哪里: 1、静态网站( 简单 ) 2、动态网站(无陷阱)( 难 ) 3、动态网站(有陷阱)( 非常 难 ) 对于静态网站,页面数量有限,无论页面之间如何构造链接,无论页面内容是什么,都能在一个有限的时间内抓取完毕。对于静态网站来说,我们假设网站无陷阱(不会有程序来动态生成无穷无尽的静态页面),内容质量高(不会为了提高搜索结果排名进行关键词堆砌,不会大量静态页面都是一样的内容或近似的内容等)。这样的静态网站,就是爬虫理想的抓取对象! 对于 无陷阱 的动态网站,用户需要和服务器交互,服务器根据用户指定的 参数 动态返回 结果 。爬虫要抓取这样的网站,就需要 枚举完所有可用的参数 ,而很多时候,爬虫是无法枚举完所有可用的参数的。 假如我们要想抓取淘宝上面的所有商品,我们通过他的 搜索入口 去抓是无法抓完的,因为我们无法枚举所有的商品;那么我们还可以通过 分类栏目 作为入口,一页一页地往后抓,这虽然可行,但是无法抓全,淘宝会对 分页 进行 限制 ,如100页

python-35:urllib 和 urllib2 模块

旧巷老猫 提交于 2019-11-28 10:57:00
首先,urllib 和 urllib2 是python 自带的模块,所以我们可以通过官网文档来查看它们的详细信息,这里依然给出网址,感兴趣的同学可以看一下 urllib模块: http://python.usyiyi.cn/python_278/library/urllib.html urllib2模块: http://python.usyiyi.cn/python_278/library/urllib2.html 这里还是简单的说一下吧,貌似python3中,urllib的库已经有了一些变化,而我们一直以来就是使用python2.7,所以python3的改变暂不考虑 这里提一个有意思的事情,常常有人会问,新手学python是学习python2还是python3好,毕竟两个版本之间的差别还是挺大的,这个问题我也曾经想过,最后在<笨方法学python>里面看到了一段话,大意是这样子的,可能会有人问你或者嘲笑你为什么学习python2而不去学习python3,你可以这样回答他,等到你电脑里面所有的程序都是用python3来编写的时候再和我说这件事 这是一个插曲,但是我为什么最后选择python2呢?因为我觉得虽然两个版本之间有差别,但是最基本的语法或者是一些函数是不会改变的,知道了python2的语法,剩下来的就是学习python3中的差异,而且就现在来说

互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门)

做~自己de王妃 提交于 2019-11-27 20:52:14
系列教程: 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门) 正则表达式 ,又称 正规表示法 、 常规表示法 (英语:Regular Expression,在代码中常简写为regex、regexp或RE) 正则表达式几乎出现在每一个编程语言中,有着极其广泛的应用,比如做网页的时候,判断用户输入的是否是邮箱这样的正则。正则表达式本身写法基本在各个语言中 都是一致的,不过调用方法可能略有不同,在我们教的爬虫中,正则表达式主要应用在界定列表url和内容url的格式上,就是什么url是列表url,什么 url是内容url,什么url直接丢弃掉。这样做主要是为了提高整个爬虫的爬取效率,防止爬虫在无关的url花费太长的时间,当然如果希望全网爬的话, 也可以不做设定。 对于手里有点闲钱的人来说,可能最常见的投资品就是股票了,虽然中国股票市场那叫一个变幻诡谲,妖兽频出。但依旧相对其他流通性差,投资门槛高的投资产品来 说,有着国家信用背书的股市依然是不二的投资选择。股票的数据很多地方都有,我们今天就通过雪球的行情中心,爬一下当天各个上市公司的股票价格吧。 打开雪球行情中心: 哇,突然觉得这是我们教程最高大上的一次。首先,这个页面就可以作为一个不错的入口Url,因为有着挺多的连接,不过从效率来讲,虽然爬虫本身可以帮我们去做很多事情,但是最好还是直接找到列表url会更快一些。我们继续往里找

“大数据应用场景”之隔壁老王(连载四)

冷暖自知 提交于 2019-11-27 18:58:35
老王上周预测了辣条的销量之后,马上就吩咐了工厂工人,开始制作各种形状的辣条了,什么条状的,块状的,片状等等等。可是等到辣条生产出来之后,是要卖的呀,所以怎么定价又成了老王的一个难题,也成了老王再次敲响前嗅大门的动力。。。 老王先是寒暄了几句,然后马上跑到小编身边又是嘘寒问暖又是端茶递水,小编知道又来活了,最后在小编的一再逼问下,老王说明了来意,原来他是想让小编接着帮他定价以及预测明年收入。小编瞬时间松了一口气,so easy啊~ 经验张口就来: 准备工具:Forespider 、ForeAna。 方法: 1、使用Forespider,采集淘宝、天猫、京东前十名辣条商家,2017年的价格。 2、关联到ForeAna数据分析引擎中自动得出,按月、节假日、618大促等价格变动情况,得出价格变动曲线。 3、建立数学模型,将得到的收入作为因变量,以价格作为自变量,建立数学预测模型。 4、通过上期预测的销量以及本次的价格,关联到ForeAna数据分析引擎,得出收入变动曲线。 5、从中找到价格、销量和收入的平衡点,得出老王今年的定价,以及促销时的优惠力度,并且在定价的同时也预测了明年的收入。 注意事项: 1、对爬虫不懂的,可以来找前嗅呀! 2、如果感觉不错,可不可以给小编点个赞,老板说,只有集够50个赞才给小编送辣条,求求。 预测了收入的老王挺开心的。现在,他已经踏上了即将买房的道路。。。 来源

配置Nutch模拟浏览器以绕过反爬虫限制

[亡魂溺海] 提交于 2019-11-27 09:18:55
当我们配置Nutch抓取 http://yangshangchuan.iteye.com 的时候,抓取的所有页面内容均为: 您的访问请求被拒绝 ...... 这是最简单的 反爬虫策略( 该策略简单地读取HTTP请求头User-Agent的值来判断是人(浏览器)还是机器爬虫 ) ,我们只需要简单地配置Nutch来 模拟浏览器(simulate web browser) 就可以绕过这种限制。 在 nutch-default.xml 中有 5 项配置是和 User-Agent 相关的: <property> <name>http.agent.description</name> <value></value> <description>Further description of our bot- this text is used in the User-Agent header. It appears in parenthesis after the agent name. </description> </property> <property> <name>http.agent.url</name> <value></value> <description>A URL to advertise in the User-Agent header. This will appear