飛到花上 採集花粉 通過處理 數據清洗 存儲編程可用的數據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