python与seo应用_【张亚楠】Python在我SEO工作中的应用(1)
本文信息本文由方法SEO顧問發表于2015-11-1814:36:03,共 3373 字,轉載請注明:【張亞楠】Python在我SEO工作中的應用(1)_【方法SEO顧問】,如果我網站的文章對你有所幫助的話,來百度口碑給個好評唄!
1. 本系列前言
一直想寫
本系列暫時計劃分為幾個主題,將在近幾周完成:數據采集
關鍵詞拓展
數據系統
工具篇
適用人群:具有Python基礎的SEOer(沒有Python基礎的直接往下拉,看推薦的Python教程)。
2. SEO與數據采集
SEO工作離不開數據采集。獲取某個頻道所有URL,查詢一批網頁的收錄/排名情況,采集競爭對手的特定數據,都需要用到數據采集。
特別是對個人站長來說,只有通過數據采集才能獲得大量數據,并生成網頁。
3. 原始爬蟲
最原始的爬蟲爬蟲可以只是發送一個HTTP請求,并獲取返回的響應數據,使用Requests三行就可以寫出一個簡單的爬蟲,代碼如下:import requests r = requests.get('http://www.zhidaow.com') print r.content
注:關于Requests的入門教程可以看我這篇文章;
除了Requests,還可以使用python標準庫urllib,urllib2。
4. 高級爬蟲
給原始爬蟲升級幾個技能就可以投入使用了,我經常升級以下幾個功能。
4.1 獲取特定字段: BeautifulSoup+Requests
BeautifulSoup可以將HTML解析為DOM樹,然后獲取特定字段。關于BeautifulSoup的詳細內容可以看這篇文章,這里只舉一個簡單的例子。
以下是途牛某游玩頁面的部分代碼
玉淵潭櫻花節
地????? 址:
游玩時間:預計4小時
可以通過..這個特征來獲取4小時這個字段:import requests from bs4 import BeautifulSoup as bs url = 'http://www.tuniu.com/play/9232/' r = requests.get(url) soup = bs(r.content) print soup.find('b', class_='c_f80').string #輸出字段有空格,可以通過strip()函數來過濾多余的空格和換行
4.2 使用代理
為避免屏蔽,抓取時通常需要代理,使用Requests的proxies參數可以實現這個效果。接上面代碼:proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } r = requests.get(url, proxies=proxies)
如果代理需要賬戶和密碼,則需這樣:proxies = { "http": "http://user:pass@10.10.1.10:3128/", }
4.3 模擬百度蜘蛛
抓取時模擬搜索引擎蜘蛛是個好主意,這里就以User-Agent試圖模仿百度蜘蛛去抓取:headers = { 'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)', } r = requests.get(url, headers=headers)
4.4 多線程抓取
為了提高抓取速度,一般都會采用多線程的方式去抓取,我在這篇文章中采用了第三方庫threadpool的形式實現了多線程。在這里我采用另外一種形式,用標準庫multiprocessing來實現:import requests from bs4 import BeautifulSoup as bs from multiprocessing.dummy import Pool as ThreadPool #URL列表 urls = [ 'http://www.tuniu.com/play/9232/', 'http://www.tuniu.com/play/9231/', 'http://www.tuniu.com/play/9237/', 'http://www.tuniu.com/play/9234/', # etc.. ] #提取字段函數 def get_play_time(url): r = requests.get(url) soup = bs(r.content) print soup.find('b', class_='c_f80').string.strip() #設置線程數 pool = ThreadPool(4) #開啟多線程 results = pool.map(get_play_time, urls) #關閉線程并等待結束 pool.close() pool.join()
注:這個多線程的實現主要參考了這篇文章。
4.5 requests+正則
有時候如果所需字段出現在JS等DOM樹之外,可以直接使用正則的方式獲取,有時候速度反而會更快一點。
4.6 抓取網頁JS內容
很多網站會將重點內容放在JS中,增加了抓取的難度。這種可以通過Selenium+PhantomJS+Xpath的方式抓取。
5. 終極爬蟲
終極爬蟲就屬Scrapy了。Scrapy可以理解為搜索引擎爬蟲的雛形,可以沿著初始URL列表進行抓取,并且可以設置抓取深度,抓取字段,抓取URL,抓取頻率等等。
另外,還可以加入隨機代理,隨機UA,分布式抓取,入庫等高級功能,并且還可以與selenium結合對JS生成的元素進行抓取。很多比價網站都是用Scrapy做商城爬蟲,Scrapy也是爬蟲工程師的必備技能之一。我對官方教程里的基礎示例做了修改,示范下基礎爬蟲的代碼:import scrapy class TuniuSpider(scrapy.Spider): name = 'tuniu' # 設置爬蟲名稱,這里沒卵用 start_urls = ['http://www.tuniu.com/guide/d-beijing-200/jingdian/'] # 設置初始抓取鏈接 def parse(self, response): for href in response.css('.mgl_pic a::attr(href)'): # 用CSS提取鏈接,也可以用xpath,beautifulsoup提取 yield scrapy.Request(href.extract(), callback=self.parse_poi) # 提出的鏈接用parse_poi函數處理 def parse_poi(self, response): yield { 'name': response.css('h1 a::text').extract()[0], # 用CSS規則從網頁中提取字段 'english': response.css('.english::text').extract()[0], }
之后就可以使用scrapy runspider tuniu_spider.py -o tuniu_poi.json進行抓取了。
推薦教程:
注:Scrapy依賴很多其他庫,如lxml,Twist,所以安裝起來會比較麻煩,之后可能會單獨寫一篇文章講Scrapy。
6. Python教程推薦入門教程:笨方法學Python(練習中學習,很快有成就感)
基礎學習:《Python核心編程》,或者其他系統講解Python原理及標準庫的書
進階學習:《Python Cookbook》
熟讀資料:Python文檔
7. 備注Python只是抓取工具,火車頭也是一款不錯的抓取工具,我跟隔壁小伙伴培訓就是講的火車頭采集,界面簡單,容易上手;
題圖為SEO的一生,版權在圖片上。
總結
以上是生活随笔為你收集整理的python与seo应用_【张亚楠】Python在我SEO工作中的应用(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树的层次遍历_【腾讯面试热身题】二叉
- 下一篇: 角谷定理python输出变化过程_日本一