爬虫

基于Python实现excel表格读写

浪子不回头ぞ 提交于 2019-12-05 14:03:07
首先安装对应的xlrd和xlwt 打开cmd命令窗口输入pip install xlrd和pip install xlwt就可以安装。之后输入pip list检查是否成功配置: xlrd操作# 接下来就是常用的语法操作: excel_data = xlrd.open_workbook(文件路径') #得到对应的工作表 sheet = excel_data.sheets()[工作表序号] #得到对应工作表中的某一个表格 sheet.row_values(2)#对应的某一行的数据 sheet.cell(6,1).value#对应某一列的数据 以该表格为例先试一下对应的语句: 先指定对应的表格和其中的某一个表,否则会提示出错编译不通过。将以上代码运行得到: 源码如下: import xlrd import xlwt excel_data = xlrd.open_workbook(文件路径') excel_data = xlrd.open_workbook(r'C:\Users\hys mac\Desktop\实用的excel表格模板.xls') sheet = excel_data.sheets()[工作表序号] sheet = excel_data.sheets()[0] print(sheet.row_values(2)) #打印某一行数据 print(sheet.col

Python爬虫关于urlretrieve()函数的使用笔记

匆匆过客 提交于 2019-12-05 05:36:17
urllib 模块提供的 urlretrieve() 函数。urlretrieve() 方法直接将远程数据下载到本地。 >>> help(urllib.urlretrieve) Help on function urlretrieve in module urllib: urlretrieve(url, filename=None, reporthook=None, data=None) 参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。) 参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。 参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。 下面通过例子来演示一下这个方法的使用,这个例子将 google 的 html 抓取到本地,保存在 D:/google.html 文件中,同时显示下载的进度。 import urllib def cbk(a, b, c): '''回调函数 @a: 已经下载的数据块 @b: 数据块的大小 @c: 远程文件的大小 ''' per = 100.0 * a * b /

Python爬虫学习资料书籍推荐

耗尽温柔 提交于 2019-12-04 23:16:06
近年来,随着网络不断的发展,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,在这里,我们向各位读者们推荐几本关于学习 Python 爬虫的书籍。 根据小编的经验,小编向大家推荐以下书籍: 这本《Python基础教程(第2版.修订版)》书里包括Python程序设计的方方面面,从Python的安装开始,到Python的基础知识和基本概 念,并且循序渐进地介绍了一些相对高级的主题,还探讨了如何将Python与数据库、网络、C语言等工具结合使用等知识,书里结合前面讲述的内容,按照实 际项目开发的步骤在最后几个章节向读者介绍了十个具有实际意义的Python实战项目,非常适合新手入门来学习。 这本书的实用性是受到了爬虫书友的肯定的,它在各大网站的销量都是排第一,广大网友都认为这本书很适合零基础或者有一点基础想深入学习Python的朋友们,而且价格也还算合理京东和当当等网站都还是有适当的折扣,初学者们赶快下手吧! 当然了,如果你已经学会了上一本书的内容,并且开始从事Python编程工作的话,下面这本书,小编也要向大家推荐一下了: 看这本书的封面有没有觉得很可爱呀,这本书可不只是可爱那么简单,里面的内容是相当充实的,书里介绍了Python应用在各个领域中的一些技巧和方法,本书 涵盖了Python在应用中常见的好多问题,并且提出了一些解决方法,不管你现在处于哪个阶段

python3——urllib模块的网络爬虫

孤街醉人 提交于 2019-12-04 17:44:30
urllib urllib模块是python3的URL处理包 其中: 1、urllib.request主要是打开和阅读urls 个人平时主要用的1: 打开对应的URL:urllib.request.open(url) 用urllib.request.build_opener([handler, ...]),来伪装成对应的浏览器 import urllib #要伪装成的浏览器(我这个是用的chrome) headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36') url='http://hotels.ctrip.com/' opener = urllib.request.build_opener() #将要伪装成的浏览器添加到对应的http头部 opener.addheaders=[headers] #读取相应的url data = opener.open(url).read() #将获得的html解码为utf-8 data=data.decode('utf-8') print(data) 2、urllib.parse主要是用来解析url 主要方法: urllib.parse

python有趣用法汇总(持续更新)

吃可爱长大的小学妹 提交于 2019-12-04 03:09:36
使用python过程中经常会不经意间遇到非常有趣的用法,于是特意搜集了一些 有趣的用法 1.for-else用法 循环正常结束则执行else语句。一般用于循环找符合条件的元素,如果找到则 break 调出循环,不会触发 else ;如果没有找到(完整运行循环)则 print not found 详见 Python中循环语句中的else用法 《Effictive Python》一书中对for-else用法提出了质疑,主要观点是可以通过封装成函数来取代这一用法,而封装成函数是更加通用易懂的做法,所以一般不会使用for-else用法。为了不影响文章的紧凑,我把评论区对书上内容的引用放在文末“ 更新补充 ”部分,有兴趣的读者可以去看一下。 2.try-else用法 如果没有触发异常就执行 else 参考 这里 3.解包用法 类似这样 a,b,c = ['a', 'b', 'c'] python有趣的解包用法 4.单行if-else a = 1 b = 3 if a == 1 else 2 print('it is one' if a == 1 else 'no') #加群:725479218 获取更多的学习资料 5.迭代器传入函数中不用加括号 # 一般是这样 a = (i for i in range(10)) sum(a) # 我们可以这样 sum((i for i in range

通过scrapy爬取一号店商品信息

二次信任 提交于 2019-12-02 17:42:37
本文为作者原创转载请注明出处(silvasong:http://my.oschina.net/sojie/admin/edit-blog?blog=653199) 前面的文章对scrapy的源码进行简单的分析,这里我将通过一个简单的例子介绍怎样使用scrapy。 确定需要爬取一个网站之后,最先需要做的工作就是分析网站层次结构,选择入口URL.一般情况下我们都是选择网站的首页作为起始链接. 分析一号店的过程中,我发现一号店提供了一个商品分类页面( http://www.yhd.com/marketing/allproduct.html )从这个页面中就可以获取到所有商品的分类.然后我们通过每个分类的链接又能够得到每个分类下的商品. 开发环境: ubuntu、python 2.7、scrapy scrapy可以运行在window、mac、linux上面,为了开发方便这里我选择的ubuntu,另外scrapy是基于python开发的所以安装python也是必须的.最后就是安装scrapy。 完成环境的搭建以后接下将一步步介绍具体的实现: 一、第一步先通过scrapy startproject yhd 创建一个爬虫工程. 运行上面的命令后可以生成类似下面的文件结构. tutorial被替换成yhd。 scrapy.cfg scrapy配置文件可以保持默认不修改. items.py

开源爬虫Labin,Nutch,Neritrix介绍和对比

丶灬走出姿态 提交于 2019-12-02 02:49:16
Larbin 开发语言:C++ http://larbin.sourceforge.net/index-eng.html larbin是个基于C++的web爬虫工具,拥有易于操作的界面,不过只能跑在LINUX下,在一台普通PC下larbin每天可以爬5百万个页面(当然啦,需要拥有良好的网络) 简介 Larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien Ailleret独立开发。larbin目的是能够跟踪页面的url进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。 Larbin只是一个爬虫,也就是说larbin只抓取网页,至于如何parse的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin也不提供。 Latbin最初的设计也是依据设计简单但是高度可配置性的原则,因此我们可以看到,一个简单的larbin的爬虫可以每天获取500万的网页,非常高效。 功能 1. larbin 获取单个、确定网站的所有联结,甚至可以镜像一个网站。 2. larbin建立 url 列表群,例如针对所有的网页进行 url retrive后,进行xml的联结的获取。或者是 mp3 。 3. larbin 定制后可以作为搜索引擎的信息的来源(例如可以将抓取下来的网页每2000一组存放在一系列的目录结构里面)。 问题 Labin的主要问题是,:

使用scrapy的定制爬虫-第二章-概

Deadly 提交于 2019-12-01 09:26:44
但在堆代码之前,先预研一下,然后想想下面几个问题. 1,你定制爬虫的目标 2,预计的规模 3,是否需要js支持 4,是单次爬取还是周期性爬取 5,其他 6,突破网站的防爬取策略 如上几个问题也并非完全独立,他们通常相互影响.如固定的爬取目标通常有可预计的爬取规模. etc... 1,爬取的目标,你所需要爬取的网站url是固定的集合还是变动的.对于类似比价这种爬取目标固定的,问题要略简单一点,你需要爬取的是那些站,能遇到的问题将在一次完整爬取发生.但对于非固定目标爬取则略困难.一个场景是我从搜索引擎搜索一系列关键字,将获得的结果作为目标爬取.很难确保你写的爬虫在所有目标上工作都是正常的. 2,爬取规模影响方面很多,对于一次固定的小规模爬取,可以完全不考虑各类优化.但对于规模较大的爬取,则需要考虑各种优化.有如下方面.1,分布式.2,各部分的效率,如内容解析效率(正则,xpath等),链接提取效率,3,settings中相关参数的配置. 3,是否需要js(javascript)支持,如今越来越多的网站使用js生成内容.也有可能出于防爬取的目的采用js.根据具体情况采用模拟js相关动作解决或使用js引擎,webkit之类完整执行. 4,单次爬取较易,周期性爬取涉及周期长短,如何保障周期内完成这次爬取任务.根据任务量和实际需求确定爬取周期. 5,其他,如何支持http缓存来提高效率

网络机器人的识别与攻防的经典案例(也即爬虫与反爬虫的经典案例)

我只是一个虾纸丫 提交于 2019-12-01 02:12:06
本文我们介绍一个网络机器人的识别与攻防的经典案例(也即爬虫与反爬虫的经典案例)。使用到的 代码见本人的 superword 项目: https://github.com/ysc/superword/blob/master/src/main/java/org/apdplat/superword/tools/ProxyIp.java 我们的目的是要使用机器人自动获取站点 http://ip.qiaodm.com/ 和站点 http://proxy.goubanjia.com/ 的免费高速HTTP代理IP和端口号。 不过他们未对机器人进行识别,如通过如下代码就可以获取网页内容: public static void main(String[] args) { try { String url = "http://proxy.goubanjia.com/"; HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection(); connection.setConnectTimeout(10000); connection.setReadTimeout(10000); connection.setUseCaches(false); BufferedReader reader = new

Nutch的Hadoop方式爬取效率优化

本小妞迷上赌 提交于 2019-11-30 21:49:51
下面这些是潜在的影响爬取效率的内容(官方资料翻译): 1)DNS设置 2)你的爬虫数量,太多或太少 3)带宽限制 4)每一主机的线程数 5)要抓取的urls的分配不均匀 6) robots.txt中的高爬取延时(通常和urls的分配不均匀同时出现) 7)有很多比较慢的网页(通常和分配不均匀同时出现) 8)要下载太多的内容(PDF,大的html页面,通常和分配不均匀同时出现) 9)其它 那现在怎样改善它们? 1)在每一个本地的爬虫机器上设置DNS,如果是多个爬取机器和一个单独的DNS中心这种情况,那么它就会像有DOS攻击在DNS服务器上那样,使整个系统变慢。我们经常设置两层,首先命中本地DNS缓存,然后就是大的DNS缓存,就像OpenDNS或Verizon。 2)这将是map任务数乘以fetcher.threads.fetch属性值的数量。所以10个map任务*20个线程=一次200个爬取列表。太多的话会超过你系统的负担,太少的话就会使一些机器闲置。你需要认真考虑在你的环境下如何设置这些属性。 3)带宽限制,用ntop,ganglia和其它监控软件来测定你使用了多少的带宽。计算输入和输出的带宽。可以做一个简单的测试,用抓取网络中一台不用作爬虫的服务器中,如果它与其中一台爬虫机器连接时或当那台机器抓取时从中下载信息时非常慢,这时你就可以加大带宽