飞到花上 采集花粉 通过处理 数据清洗 存储编程可用的数据javascript
urlib BeautifulSoup lxml Scrapy PdfMiner Requests Selenium NLTK Pillow unittset PySocksphp
知名网站的API MySQL数据库 OpenRefine数据分析工具html
PhanthomJS无头浏览器java
Tor代理服务器等内容python
-----------git
关于多进程 multiprocessinggithub
并发 concurrencyweb
集群 cluster正则表达式
等高性能采集的很少数据库
国内外关于网络数据保护的法律都在不断地制定与完善
做者介绍了美国与网络数据采集相关的法律与典型案例
呼吁网络爬虫严格控制网络数据采集的速度 下降 被采集网站服务的负担 法律问题
语言是思想的解释器 数据是语言的载体
bug是产品声明中的挑战 好产品 是不断面对bug而且打败bug的结果
--------
天天6点起床
magic魔术
网络数据采集 web Scraping
巫术 wizardry
先写一个简单的网络爬虫并不难 就是先收集数据 再显示到 命令行或者存储到数据库里
github
---------
https://github.com/REMitchell/python-scraping
-------------
screen scraping
data mining
web harvesting
-------------
bots 机器人
--------
若是你上网的惟一方式是用浏览器
那么你失去了不少可能
twitter 或者维基百科的API 发现一个API同时提供了 不一样的数据类型
------
市场预测 机器语言翻译 医疗诊断领域 对新闻网站 文章 健康论坛的数据进行采集
-----
Jonathan Harris
Sep Kamvar
在2006年发起的咱们感受挺好
wefeelfine
http://wefeelfine.org/
项目
从大量英文博客中抓取许多
i feel
i am feeling开头的语句
描述这个世界天天 每分钟的 感受
-------
Bill Lubanovic 写的《Python语言及其应用》
Jessica McKellar 的教学视频
http://shop.oreilly.com/product/110000448.do
-----------
http://www.safaribooksonline.com
---------
域名切换 信息收集 以及 信息存储功能的爬虫
1990年的Nexus浏览器
浏览器自己就是一个程序 能够分解成不少基本组件能够重用 重写
-----------------------------------
被分红一些子模块
urllib.request
urllib.parse
urllib.error
库 里面有模块
----------
python的标准库
BeautifulSoup库的名字 取自 刘易斯 卡罗尔 的《爱丽丝梦游仙境》里的同名诗歌
化平淡为神奇
----
有病没药 天灾
-------
BS4
BeautifulSoup
-----------
sudo apt-get install python-bs4
mac
sudo easy_install pip
pip
pip install beautifulsoup4
------------
prettify---修饰
-----
bsObj.html.body.h1
bsObj.body.h1
bsObj.html.h1
-----------------
万一 爬着爬着 跌机了咋办
-------------
若是服务器不存在的话 urlopen会返回一个None对象
Beautiful对象找不到的时候返回的也是None
标签下面的标签没有的 话
就会
AttributeError错误
---
import urllib.request
from urllib.error import HTTPError
from bs4 import BeautifulSoup
def getTitle(url):
try:
html=urllib.request.urlopen(html)
except HTTPError as e:
return None
try:
bsObj=BeautifulSoup(html.read())
title=bsObj.body.h1
except AttributeError as e:
return None
return title
title=getTitle("http://www.pythonscraping.com/pages/page1.html")
if title==None:
print("题目不能是空")
else:
print(title)
-----------
米开朗其罗
如何完成《大卫》
很简单 只要用锤子 把石头上不像大卫的地方敲掉就行了
=----------
页面解析难题(Gordian Knot)的时候
当网站管理员对网站稍做修改以后 这行代码就会失效 甚至可能会毁掉整个网络爬虫
-------------
寻找 打印此页 的连接
看看网站有没有HTML样式更好的移动版
把本身的请求头设置成处于移动设备的状态 而后接受网站移动版
寻找隐藏在Javascript文件里面的信息
我曾经把一个网站上 的街道地址 整理成格式整洁的数组时候
查看过内嵌谷歌的javascript文件
网站标题也能够从网页的URL连接里获取
若是你找的信息只是存在一个网站上 别的地方没有
三思然后行写代码
--------------
Lambda表达式
本质上就是一个函数
能够做为其余函数的 变量使用
一个函数不是定义成f(x,y)
而是定义成 f(g(x),y)
或者f(g(x),h(x))的形式
----
BeautifulSoup容许咱们把特定函数类型看成findAll函数的参数
惟一限制条件是
这些函数必须把一个标签做为参数且返回结果是布尔类型
BeautifulSoup用这个函数来评估它遇到的每一个标签对象
最后评估结果为真的标签保留 将其余标签删除
soup.findAll(lambda tag:len(tag.attrs)==2)
这行代码会找出下面的标签:
<div class="body" id="content"></div>
<span style="color:red" class="title"></span>
-----
lambda 表达式选择标签 将是regular expression的完美替代方案
-------
除了使用BeautifulSoup (Python里最受欢迎的HTML解析库之一)
lxml (http://lxml.de/) 解析 HTML XML文档
很是底层的实现 大部分源码用c写的
学习曲线越陡峭 你能够越快学习它
处理HTML文档时很快
-----------
HTML parser Python自带的解析库
不用安装
https://docs.python.org/3/library/html.parser.html
----------
返回的是Python字典对象
能够获取和操做这些属性
myImgTag.attrs["src]
----------------
本质是一种递归
使用网络爬虫你必须谨慎地考虑须要消耗多少网络流量
---
还要尽力思考能不能让采集目标服务器负载更低一些
---------
维基百科六度分割理论
-----
凯文 贝肯(kevin Bacon)
六度分隔值游戏
两个游戏中 都是把两个不相关的 主题
维基百科里是词条之间的连接
凯文 贝肯是用出如今同一部电影里的演员来 连接
用一个总数不超过六条的主题连接起来 包括原来的两个主题
http://oracleofbacon.org/index.php
------------
from urllib.request import urlopen
from bs4 import BeautifulSoup
html=urlopen("http://en.wikipedia.org/wiki/Kevin_Bacon")
bsObj=BeautifulSoup(html)
for link in bsObj.findAll("a"):
if 'href' in link.attrs:
print(link.attrs['href'])
----------
维基百科的每一个页面充满了 侧边栏 页眉 页脚 连接链接到 分类页面 对话页面 其余不包含词条的页面的连接:为了判断维基百科的内链是否连接到 一个词条他写了一个很大的过滤函数超过100行代码不幸的是在项目启动的时候 没有花时间去比较词条连接和其余连接的差别---URL连接不包含分号在id是bodyContent的div标签里URL连接都是以/wiki开头----------http://regexpal.com/网站 上在线测试正则表达式-----------不一样邮箱服务器的邮箱地址的具体规则不尽相同--------邮箱的正则表达式---------[A-Za-z0-9\._+]+@[A-Za-z]+\.(com|org|edu|net)----------咱们后面要创建的爬虫也是顺着连接从一个页面跳转到另外一个页面描绘出一张网络地图此次 再也不忽略外链 跟着外链跳转爬虫是否是能够记录咱们浏览过的没一个页面上的信息相比以前咱们作的 单个域名采集互联网采集要难的多不一样网站的布局迥然不一样意味着咱们必需要寻找的信息以及查找方式上都极具灵活性-------------芝麻街http://www.sesamestreet.org------------我要收集哪些数据?这些数据能够经过采集几个已经肯定的 网站 完成吗?个人爬虫须要发现那些我可能不知道的网站吗--个人爬虫到了某个站 是当即顺着出站连接跳到一个新站仍是在网站上待会深刻采集网站的内容有没有我不想采集的一类网站对非英文网站的 内容感兴趣吗个人行为引发了某个网站网管的怀疑我如何避免法律责任------写网络爬虫的挑战之一 是你常常要重复一些简单人物 找出网页上的全部连接 区份内链 外链 跳到新的页面-------http://scrapy.org/dowmload