標籤:Regex sql 串連 測試 結果 content safari 比較 抓取
飛到花上 採集花粉 經過處理 資料清洗 儲存編程可用的資料
urlib BeautifulSoup lxml Scrapy PdfMiner Requests Selenium NLTK Pillow unittset PySocks
知名網站的API MySQL資料庫 OpenRefine資料分析工具
PhanthomJS無頭瀏覽器
TorProxy 伺服器等內容
-----------
關於多進程 multiprocessing
並發 concurrency
叢集 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檔案裡面的資訊
我曾經把一個網站上 的街道地址 整理成格式整潔的數組時候
查看過內嵌Google的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/網站 上線上測試Regex
-----------
不同郵箱伺服器的郵箱地址的具體規則不盡相同
--------
郵箱的Regex
---------
[A-Za-z0-9\._+][email protected][A-Za-z]+\.(com|org|edu|net)
----------
我們後面要建立的爬蟲
也是順著連結從一個頁面跳轉到另一個頁面
描繪出一張網路地圖
這次 不再忽略外鏈 跟著外鏈跳轉
爬蟲是不是可以記錄我們瀏覽過的沒一個頁面上的資訊
相比之前我們做的 單個網域名稱採集
互連網採集要難的多
不同網站的布局迥然不同
意味著我們必須要尋找的資訊以及尋找方式上都極具靈活性
-------------
芝麻街
http://www.sesamestreet.org
------------
我要收集哪些資料?這些資料可以通過採集幾個已經確定的 網站 完成嗎?
我的爬蟲需要發現那些我可能不知道的網站嗎
--
我的爬蟲到了某個站 是立即順著出站連結跳到一個新站還是在網站上待會
深入採集網站的內容
有沒有我不想採集的一類網站
對非英文網站的 內容感興趣嗎
我的行為引起了某個網站網管的懷疑
我如何避免法律責任
------
寫網路爬蟲的挑戰之一 是你經常要重複一些簡單人物
找出網頁上的所有連結 區分內鏈 外鏈 跳到新的頁面
-------
http://scrapy.org/dowmload
Python網路資料擷取