1. Python爬蟲:如何在一個月內學會爬取大規模數
爬蟲是入門Python最好的方式,沒有之一。Python有很多應用的方向,比如後台開發、web開發、科學計算等等,但爬蟲對於初學者而言更友好,原理簡單,幾行代碼就能實現基本的爬蟲,學習的過程更加平滑,你能體會更大的成就感。
掌握基本的爬蟲後,你再去學習Python數據分析、web開發甚至機器學習,都會更得心應手。因為這個過程中,Python基本語法、庫的使用,以及如何查找文檔你都非常熟悉了。
對於小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情。比如有人認為學爬蟲必須精通 Python,然後哼哧哼哧系統學習 Python 的每個知識點,很久之後發現仍然爬不了數據;有的人則認為先要掌握網頁的知識,遂開始 HTMLCSS,結果入了前端的坑,瘁……
但掌握正確的方法,在短時間內做到能夠爬取主流網站的數據,其實非常容易實現,但建議你從一開始就要有一個具體的目標。
在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。這里給你一條平滑的、零基礎快速入門的學習路徑。
1.學習 Python 包並實現基本的爬蟲過程
2.了解非結構化數據的存儲
3.學習scrapy,搭建工程化爬蟲
4.學習資料庫知識,應對大規模數據存儲與提取
5.掌握各種技巧,應對特殊網站的反爬措施
6.分布式爬蟲,實現大規模並發採集,提升效率
- -
學習 Python 包並實現基本的爬蟲過程
大部分Python爬蟲都是按「發送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。
Python爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議從requests+Xpath 開始,requests 負責連接網站,返回網頁,Xpath 用於解析網頁,便於抽取數據。
如果你用過 BeautifulSoup,會發現 Xpath 要省事不少,一層一層檢查元素代碼的工作,全都省略了。這樣下來基本套路都差不多,一般的靜態網站根本不在話下,豆瓣、糗事網路、騰訊新聞等基本上都可以上手了。
當然如果你需要爬取非同步載入的網站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現自動化,這樣,知乎、時光網、貓途鷹這些動態的網站也可以迎刃而解。
- -
了解非結構化數據的存儲
爬回來的數據可以直接用文檔形式存在本地,也可以存入資料庫中。
開始數據量不大的時候,你可以直接通過 Python 的語法或 pandas 的方法將數據存為csv這樣的文件。
當然你可能發現爬回來的數據並不是干凈的,可能會有缺失、錯誤等等,你還需要對數據進行清洗,可以學習 pandas 包的基本用法來做數據的預處理,得到更干凈的數據。
- -
學習 scrapy,搭建工程化的爬蟲
掌握前面的技術一般量級的數據和代碼基本沒有問題了,但是在遇到非常復雜的情況,可能仍然會力不從心,這個時候,強大的 scrapy 框架就非常有用了。
scrapy 是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。
學會 scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。
- -
學習資料庫基礎,應對大規模數據存儲
爬回來的數據量小的時候,你可以用文檔的形式來存儲,一旦數據量大了,這就有點行不通了。所以掌握一種資料庫是必須的,學習目前比較主流的 MongoDB 就OK。
MongoDB 可以方便你去存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。
因為這里要用到的資料庫知識其實非常簡單,主要是數據如何入庫、如何進行提取,在需要的時候再學習就行。
- -
掌握各種技巧,應對特殊網站的反爬措施
當然,爬蟲過程中也會經歷一些絕望啊,比如被網站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態載入等等。
遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,常規的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。
往往網站在高效開發和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網站已經難不到你了。
- -
分布式Python爬蟲,實現大規模並發採集
爬取基本數據已經不是問題了,你的瓶頸會集中到爬取海量數據的效率。這個時候,相信你會很自然地接觸到一個很厲害的名字:分布式爬蟲。
分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具。
Scrapy 前面我們說過了,用於做基本的
2. 使用爬蟲爬取數據違法嗎
爬蟲不違法,違法的是不遵從網站的爬蟲協議,對網站造成負擔,對正常用戶造成影響。
其次,搜索引擎也是爬蟲,爬蟲協議就是告訴爬蟲怎麼爬取可以。
最後,沒有官方介面或者已經下架的介面,爬取這些信息肯定是違法的,輕重而已;
當然這是法律意義的,實際上爬蟲到底違法不違法,看看案例就知道了。不對對方造成損失,不侵犯未公開介面,就沒有問題。
3. 爬蟲數據採集違法嗎
可能違法。其爬蟲下載數據,一般而言都不違法,因為爬蟲爬取的數據同行也是網站上用戶打開頁面能夠看到的數據,但是如果符合下列條件的網站進行強行數據採集時,會具有法律風險。可能會造成侵犯隱私權的違法行為。
網路爬蟲是什麼意思?
這些「爬蟲」按照特定程序,沿著一定的路徑,模擬人工操作,從網站、應用程序等終端呈現的平台上去提取和存儲數據。隨著大數據等技術的發展,網路爬蟲的影響力逐漸增加,不僅爬數、甚至於搶票、盜號、供給計算機系統等,也都有爬蟲的身影,而使得它漸漸進入公眾視野。隨之而來的也是關於爬蟲技術侵權邊界的探討。
爬蟲的類型也有很多。舉個例子,按照系統結構和實現技術,就能將爬蟲分為通用網路爬蟲(不講究優先順序,把網路的內容都爬下來)、聚焦網路爬蟲(只爬預先設定好的主題相關的頁面)、增量式網路爬蟲(只爬新的網頁,或者發生變化的網頁)、深層網路爬蟲(訪問深層網頁)。
我們一般見到的爬蟲也是爬取數據用的。這類爬蟲其實就做了兩項工作:
1、獲取網頁源代碼;
2、從網頁源代碼中解析和提取所需要的數據。很多反爬技術都是針對的第一項工作,阻止你通過爬蟲獲取到源代碼,而只要獲取了源代碼,解析和提取數據的方法就非常多樣,可以說,拿到源代碼時爬數的工作算是完成一大半了。
法律依據:《中華人民共和國民法典》 第一百一十條 自然人享有生命權、身體權、健康權、姓名權、肖像權、名譽權、榮譽權、隱私權、婚姻自主權等權利。法人、非法人組織享有名稱權、名譽權和榮譽權。
4. Python3.xx中寫爬蟲,下載圖片除了urlretrieve方法,還有什麼庫的什麼方法呢
Part 1. urllib2
urllib2是Python標准庫提供的與網路相關的庫,是寫爬蟲最常用的一個庫之一。
想要使用Python打開一個網址,最簡單的操作即是:
your_url = "http://publicdomainarchive.com/"html = urllib2.urlopen(your_url).read()12
這樣所獲得的就是對應網址(url)的html內容了。
但有的時候這么做還不夠,因為目前很多的網站都有反爬蟲機制,對於這么初級的代碼,是很容易分辨出來的。例如本文所要下載圖片的網站http://publicdomainarchive.com/,上述代碼會返回HTTPError: HTTP Error 403: Forbidden錯誤。
那麼,在這種情況下,下載網路圖片的爬蟲(雖然只有幾行代碼,但一個也可以叫做爬蟲了吧,笑),就需要進一步的偽裝。
要讓爬蟲偽裝成瀏覽器訪問指定的網站的話,就需要加入消息頭信息。所謂的消息頭信息就是在瀏覽器向網路伺服器發送請求時一並發送的請求頭(Request Headers)信息和伺服器返回的響應頭(Response Headers)信息。
例如,使用FireFox打開http://publicdomainarchive.com/時所發送的Request Headers的部分內容如下:
Host:"publicdomainarchive.com/"User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"...1234
還有一些其他屬性,但其中偽裝成瀏覽器最重要的部分已經列出來了,即User-Agent信息。
要使用Headers信息,就不能再僅僅向urlopen方法中傳入一個地址了,而是需要將HTTP Request的Headers封裝後傳入:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}req = urllib2.Request(url = url, headers = headers)content = urllib2.urlopen(req).read()123
這樣,就獲得了網站的html內容。
接下來,就需要從html去獲取圖片的鏈接。
Part 2. HTMLParser
HTMLParser是Python提供的HTML解析庫之一。
但Python提供的這個類中很多方法都沒有實現,因而基本上這個庫只負責進行解析,但解析完了什麼都不做。所以如果需要對HTML中的某些元素進行加工的話,就需要用戶自己去實現其中的一些方法。本文僅實現其中的handle_starttag方法:
class MyHTMLParser(HTMLParser): #繼承HTMLParser類
def __init__(self): #初始化
HTMLParser.__init__(self) def handle_starttag(self, tag, attrs):
#參數tag即由HTMLParser解析出的開始標簽,attrs為該標簽的屬性
if tag == "img": #下載圖片所需要的img標簽
if len(attrs) == 0: pass
else: for (variable, value) in attrs: #在attrs中找到src屬性,並確定其是我們所要下載的圖片,最後將圖片下載下來(這個方法當然也有其他的寫法)
if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)123456789101112131415
Part 3. 下載圖片
從handle_starttag方法中,我們已經獲得了圖片的url,那麼,最後一步,我們要下載圖片了。
當然,要獲得網路上的圖片,自然也需要向伺服器發送請求,一樣需要用到urllib2這個庫,也需要用到上面所用到的請求頭。
以下是down_image()方法的主要代碼:
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()1234
因為這次打開的網址是個圖片,所以urllib2.urlopen(req).read()所獲取的就是圖片的數據,將這些數據需要以二進制的方式寫入本地的圖片文件,即將圖片下載下來了。
因為圖片的url的最後一部分是圖片的名字,所以可以直接用做本地的文件名,不用擔心命名沖突,也不用擔心後綴不符,很是方便。
Part 4. getFreeImages.py
這個下載圖片的腳本的完整代碼如下:
import urllib2,osfrom HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self) #self.links = {}
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "img": if len(attrs) == 0: pass
else: for (variable, value) in attrs: if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)def down_image(url,file_name):
global headers
req = urllib2.Request(url = url, headers = headers)
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()if __name__ == "__main__":
img_dir = "D:\\Downloads\\domain images"
if not os.path.isdir(img_dir):
os.mkdir(img_dir)
os.chdir(img_dir) print os.getcwd()
url = ""
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}
all_links = []
hp = MyHTMLParser() for i in range(1,30):
url = 'http://publicdomainarchive.com/public-domain-images/page/' + str(i) + '/'
req = urllib2.Request(url = url, headers = headers)
content = urllib2.urlopen(req).read()
hp.feed(content)
hp.close()041424344454647484950
5. 網路爬蟲抓取數據 有什麼好的應用
一般抓數據的話可以學習Python,但是這個需要代碼的知識。
如果是沒有代碼知識的小白可以試試用成熟的採集器。
目前市面比較成熟的有八爪魚,後羿等等,但是我個人習慣八爪魚的界面,用起來也好上手,主要是他家的教程容易看懂。可以試試。
6. 網路爬蟲可以爬取資料庫里的數據嘛
只會抓取頁面,,當然頁面里你會讀取到資料庫數據。。
所以它不算是抓取你資料庫,只是你用在了頁面上,生成了結果 ,
它抓取你這個結果。。。
其實想想也是知道的,,資料庫除了開發者對程序授權,別人怎麼可以操作得到資料庫,要不然那不是天下大亂了嘛。。。
7. 入門爬蟲下載Python還要下載單獨的編譯器如pycharm直接用IELD(Python)不行嗎
可以
但是自帶的不好用
8. 網路爬蟲,用什麼軟體最好啊
前嗅ForeSpider數據採集系統是天津市前嗅網路科技有限公司自主知識產權的通用性互聯網數據採集軟體。軟體具備全面的採集范圍、精準的數據精度、絕佳的抓取性能、簡易的可視化操作、智能的自動化採集,使企業能夠以很少的人工成本,快速獲取互聯網中結構化或非結構化的數據。
軟體幾乎可以採集互聯網上所有公開的數據,通過可視化的操作流程,從建表、過濾、採集到入庫一步到位。支持正則表達式操作,更有強大的面向對象的腳本語言系統。
台式機單機採集能力可達4000-8000萬,日採集能力超過500萬。伺服器單機集群環境的採集能力可達8億-16億,日採集能力超過4000萬。並行情況下可支撐百億以上規模數據鏈接,堪與網路等搜索引擎系統媲美。
l軟體特點
一.通用性:可以抓取互聯網上幾乎100 %的數據
1.支持數據挖掘功能,挖掘全網數據。
2.支持用戶登錄。
3.支持Cookie技術。
4.支持驗證碼識別。
5.支持HTTPS安全協議。
6.支持OAuth認證。
7.支持POST請求。
8.支持搜索欄的關鍵詞搜索採集。
9.支持JS動態生成頁面採集。
10.支持IP代理採集。
11.支持圖片採集。
12.支持本地目錄採集。
13.內置面向對象的腳本語言系統,配置腳本可以採集幾乎100%的互聯網信息。
二.高質量數據:採集+挖掘+清洗+排重一步到位
1.獨立知識產權JS引擎,精準採集。
2.集成數據挖掘功能,可以精確挖掘全網關鍵詞信息。
3.內部集成資料庫,數據直接採集入庫,入庫前自動進行兩次數據排重。
4.內部創建數據表結構,抓取數據後直接存入資料庫相應欄位。
5.根據dom結構自動過濾無關信息。
6.通過模板配置鏈接抽取和數據抽取,目標網站的所有可見內容均可採集,智能過濾無關信息。
7.採集前數據可預覽採集,隨時調整模板配置,提升數據精度和質量。
8.欄位的數據支持多種處理方式。
9.支持正則表達式,精準處理數據。
10.支持腳本配置,精確處理欄位的數據。
三.高性能:千萬級的採集速度
1.C++編寫的爬蟲,具備絕佳採集性能。
2.支持多線程採集。
3.台式機單機採集能力可達4000-8000萬,日採集能力超過500萬。
4.伺服器單機集群環境的採集能力可達8億-16億,日採集能力超過4000萬。
5.並行情況下可支撐百億以上規模數據鏈接,堪與網路等搜索引擎系統媲美。
6.軟體性能穩健,穩定性好。
四.簡易高效:節約70%的配置時間
1.完全可視化的配置界面,操作流程順暢簡易。
2.基本不需要計算機基礎,代碼薄弱人員也可快速上手,降低操作門檻,節省企業爬蟲工程師成本。
3.過濾採集入庫一步到位,集成表結構配置、鏈接過濾、欄位取值、採集預覽、數據入庫。
4.數據智能排重。
5.內置瀏覽器,欄位取值直接在瀏覽器上可視化定位。
五.數據管理:多次排重
1.內置資料庫,數據採集完畢直接存儲入庫。
2.在軟體內部創建數據表和數據欄位,直接關聯資料庫。
3.採集數據時配置數據模板,網頁數據直接存入對應數據表的相應欄位。
4.正式採集之前預覽採集結果,有問題及時修正配置。
5.數據表可導出為csv格式,在Excel工作表中瀏覽。
6.數據可智能排除,二次清洗過濾。
六.智能:智能模擬用戶和瀏覽器行為
1.智能模擬瀏覽器和用戶行為,突破反爬蟲限制。
2.自動抓取網頁的各類參數和下載過程的各類參數。
3.支持動態IP代理加速,智能過濾無效IP代理,提升代理的利用效率和採集質量。
4.支持動態調整數據抓取策略,多種策略讓您的數據無需重采,不再擔心漏采,數據採集更智能。
5.自動定時採集。
6.設置採集任務條數,自動停止採集。
7.設置文件大小閾值,自動過濾超大文件。
8.自由設置瀏覽器是否加速,自動過濾頁面的flash等無關內容。
9.智能定位欄位取值區域。
10.可以根據字元串特徵自動定位取值區域。
11.智能識別表格的多值,表格數據可以完美存入相應欄位。
七.優質服務
1.數據採集完全在本地進行,保證數據安全性。
2.提供大量免費的各個網站配置模板在線下載,用戶可以自由導入導出。
3.免費升級後續不斷開發的更多功能。
4.為用戶提供各類高端定製化服務,全方位來滿足用戶的數據需求。
9. 可以使用本地編譯器嗎
你可以把你的win7家庭版升級到旗艦版,我剛買的筆記本就是這樣升級的。