出于某些目的,需要在网上爬一些数据。考虑到Python有各种各样的库,以前想试试Pycharm这个IDE,就决定用它了。首先翻完《深入Python3》这本书,了解了它的语法之类的。下面就开始干活了:

  1. Http协议的实现。那本书里有介绍一个叫httplib2的库,看起来挺好。就用这个库把网页内容抓下来先。
  2. Html解析。之前有用过一些解析xml的库,但是想着html代码可能不会太严禁,就找到了一个传说中对html容错度很高的库:BeautifulSoup。Python3得用这个库的第四版,导入时也是要导「bs4」库。解析挺简单,我用的基本还是xml那一套。
  3. 数据保存。呃,没啥说的,就是用内建方法open()打开一个文件,会返回一个文件对象,然后调用它的各种方法就可以了。

采集的有点慢。需要采集的数据有三十多万条。但是一个页面只有十条数据,而且每三四秒左右才能从服务器抓到一个页面。刚开始想着用多线程之类的加速,但想着抓一次就好了,而且有人鄙视说,抓太快对服务器负担太大,就让它跑了个通宵。只抓了十万条数据,而且还有漏的。

然后就找到另外一个网站,继续抓。这个时候蛋疼了,那网页里的内容大部分都是js之类生成的。第一反应就是看看有没人用Python实现一个js的解释器。结果发现这个工具量太大,很多库都必须依靠浏览器来解析,太重量级。先放一放,就先看看这个js里有些啥,会不会直接有需要的数据。

以前没有网页开发的经验,只是问过同学什么js,asp语言是干嘛用的。但是Firefox很久之前就装了FireBug这个插件,就拿出来随便点点。很容易看到了加载的js,但是看了半天没发现有想要的东西。然后继续随便点点,发现加载的不只一个脚本,最后在控制台里,发现Get了一个aspx文件,里面就有想要的数据。

下面继续是Python的事了:

  1. 瞄了下那个url里,有关于日期的参数。首先很纯洁的想到我需要一个能处理日期的类。嗯,我也找到了,datetime。这货能很方便的处理关于 「时间」的功能,比如一个时间的前一天,前一秒是什么时候,计算两个时间相差多少等等,而完全不用考虑类似润年哇,加了几小时后就成了另外一天之类的问题。也能很方便的把日期用字符串按指定的格式打印出来。
  2. 抓到这里面的文件后,需要进行分析。就简单的用正则表达式了。用到的库是re。呃,用法也很简单,可以先用编译一个正则表达式,然后可以查看一个字符串能不能被这个正则表达式匹配,返回匹配部分等等。

因为这个脚本很小,比起抓整个网页来说,效率好太多了,一秒钟左右抓一个页面,而且一个页面大概有170条数据。跑了二十分钟左右就抓完了。

后:

以前用C++这样的静态类型语言,一个表达式的值,一个函数的返回值只能是一种类型。但是Python则不同,比如open()会根据你打开模式返回不同的类型的对象。虽然说C++的parser做起来很难,但是只要做出来,就能很容器确定一个变量的类型(模板中的除外,所以C++11放弃Concept的时候还是略让人蛋疼的),然后IDE就能进行很好的自动补全建议。但是动态类型语言这方面则略为蛋疼了,对IDE要求高了一点。好处则是很方便灵活,写函数里也不怎么纠结参数的实际类型,全特么是模板参数……好在PyCharm能根据一个函数的docstring判断参数的类型。

还有就是Python里对机器的控制弱了点。因为数据量有点大,所以不得不关心了下list的实现。它类似C++ stl里的vector,但是又没有提供设置容量的方法。现在就用collection.deque将就了一下。

Python3做采集的更多相关文章

  1. python3做词云分析

    python3做词云 其实词云一般分为两种,一个是权重比,一个是频次分析 主要还是体现在自然语言方向,难度较大,但这里我们用jieba词库 主要思路, 后端算数据+前端生成图(D3-cloud-好像是 ...

  2. QueryList 来做采集

    示例代码 先来感受一下使用 QueryList 来做采集是什么样子. 1 采集百度搜索结果列表的标题和链接.大理石平台价格 采集代码: $data = QueryList::get('https:// ...

  3. python3 多线程 采集 xpath

    #!/usr/bin/python # -*- coding: UTF-8 -*- '''Thread3 多线程测试采集''' import threading,time,queue,Mongo_ut ...

  4. QueryList 来做采集是什么样子

    采集百度搜索结果列表的标题和链接. $data = QueryList::get('https://www.baidu.com/s?wd=QueryList') // 设置采集规则 ->rule ...

  5. [No000079]罗辑思维2016.1.2日前的所有每日语音,python3做的网络爬虫

    源码地址:https://github.com/charygao/Download_the_LouJiSiWei 写过很久了,vision1.0里有不少bug,今天重新整理修改了一下,运行了一下,2个 ...

  6. Tensorflow & Python3 做神经网络(视频教程)

    Tensorflow 简介 1.1 科普: 人工神经网络 VS 生物神经网络 1.2 什么是神经网络 (Neural Network) 1.3 神经网络 梯度下降 1.4 科普: 神经网络的黑盒不黑 ...

  7. python爬虫采集

    python爬虫采集 最近有个项目需要采集一些网站网页,以前都是用php来做,但现在十分流行用python做采集,研究了一些做一下记录. 采集数据的根本是要获取一个网页的内容,再根据内容筛选出需要的数 ...

  8. .NET采集数据,放入数据库总结

    第一次做采集Json的还简单一些但是XML的简直了......... JSON //采集数据 public string GetBetRecordToRepository()//随便你返回什么 { t ...

  9. python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题

    当用python3做爬虫的时候,一些网站为了防爬虫会设置一些检查机制,这时我们就需要添加请求头,伪装成浏览器正常访问. header的内容在浏览器的开发者工具中便可看到,将这些信息添加到我们的爬虫代码 ...

随机推荐

  1. 求N维前缀和

    转载自http://blog.csdn.net/jzhang1/article/details/50528549#comments 膜拜 #include <iostream> #incl ...

  2. WPF,布局,Menu,MenuItem,DockPanel,Grid,DockPanel.Dock='',ToolBar,Content,Image,Uri

    布局相关: Grid as title Binding Path="", Mode= TwoWay, model should implement IPropertyChanged ...

  3. Atcoder CODE FESTIVAL 2017 qual B C - 3 Steps 二分图

    题目链接 题意 给定一个无向图,\(n\)个点,\(m\)条边(\(n,m\leq 1e5\)). 重复如下操作: 选择相异的两点u,v满足从点u出发走三条边恰好能到达点v.在这样的u,v点对之间添一 ...

  4. XML布局文件于Java代码使用问题

    2013-9-21 问题一.不同的XML文件中相同类型的控件id相同,那么将这些不同的布局xml组合在一个大的布局中,如何解决相同id问题 ? 解决办法: 不同的布局文件XML要组合成一个新的大布局, ...

  5. Android 4.4 不休眠+不锁屏+默认中文+去除导航栏

    1.不休眠 frameworks/base/packages/SettingsProvider/res/values/defaults.xml 里面60000改成-1,就是不进入休眠. 这个文件还保存 ...

  6. XSD(XML Schema Definition)学习笔记

    今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...

  7. iOS上实现圆角图片

    UIImageView自带 //圆角设置 imageView.layer.cornerRadius = ;(值越大,角就越圆) imageView.layer.masksToBounds = YES; ...

  8. 搭建redis集群时所遇问题及解决方法

    单独一台虚拟机(系统CentOS 7) 问题1 创建redis集群环境时,输入以下命令 [root@localhost redis-cluster]# ./redis-trib.rb create - ...

  9. AC日记——飞行员配对方案问题 洛谷 P2756

    题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...

  10. 51nod 1201 整数划分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 DP转移方程:dp[i][j] = dp[i-j][j]+dp[i ...