摘要:準備工作初探,這個文章屬于自己的一個總結。所以教程面向新手,無技術含量。凡是報錯信息看到,就是表示縮進不一致。注由于原網址不方便公布,代碼中的網址全部替換為了。
準備工作
初探python,這個文章屬于自己的一個總結。所以教程面向新手,無技術含量。
python環境Linux基本都有,Windows下官網也提供了便利的安裝包,怎么安裝配置網上有很多教程在此就不一一說明。
我使用的python版本為Python 3.6.4,后面的代碼也是基于python3的。
做一個小爬蟲離不開獲取網頁內容和匹配存儲內容,那么我們先裝上python爬蟲的老朋友requests:
pip install requests
再裝上pymysql擴展,方便將匹配到的內容插入到mysql數據庫中:
pip install pymysql
在python中有意思的是你需要什么,就去import什么,不像php一樣獲取網頁內容直接來個file_get_contents完事兒
廢話不多說,貼出代碼來看一下:
# -*- coding:utf-8 -*- # 加載 requests 模塊 import requests # GET方式獲取 Response 對象 response = requests.get("https://www.xxx.com/") if response: # 輸出html代碼到控制臺 print(response.text) else: # 輸出錯誤信息 print("requests error")
在python中縮進一定要嚴格,初學者(4個空格為語句塊縮進)經常犯的錯誤是tab鍵和空間鍵混用,造成的縮進不一致。凡是報錯信息看到:IndentationError: unexpected indent ,就是表示縮進不一致。
如果本身沒有編碼基礎,那么我推薦你看一下python的基本概念:http://www.kuqin.com/abyteofp...
如果已經有了編碼基礎但對縮進這方面沒有深究,可以看python的縮進規范:http://www.kuqin.com/abyteofp...
好,寫完代碼之后我們拿到控制臺試一下,完美輸出html代碼
既然能夠獲取html代碼,那我們就要找出需要的部分,這就用上了正則。Python 自1.5版本起增加了 re 模塊,它提供 Perl 風格的正則表達式模式。具體細節可以在菜鳥教程中查看:http://www.runoob.com/python/...,話不多說再貼代碼:
# -*- coding:utf-8 -*- # 加載 requests 模塊 import requests # 加載 re 模塊 import re response = requests.get("https://www.xxx.com/") # 正則匹配文本 match = re.findall(r"([sS]*?)
", response.text) if match: # 輸出匹配的內容到控制臺 print(match[0]) else: # 輸出html代碼到控制臺 print(response.text)
注:原網址為隨機一句文字顯示,每刷新一次就會變化一次。
第三步:循環匹配并加入數據庫中首先我們把數據庫和表做好,可以用sql語句創建:
CREATE DATABASE IF NOT EXISTS `sentence`; USE `sentence`; CREATE TABLE IF NOT EXISTS `sexy` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(50) NOT NULL, `datetime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `content` (`content`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
這里將content設置為了UNIQUE KEY,是為了保證抓取到的內容不重復,如果有已存在的值便直接跳過
# -*- coding:utf-8 -*- # 加載 requests 模塊 import requests # 加載 re 模塊 import re # 加載 pymysql 模塊 import pymysql # 打開數據庫連接 db = pymysql.connect("127.0.0.1", "root", "root", "sentence", charset="utf8") # 使用cursor()方法獲取操作游標 cursor = db.cursor() #死循環到天長地久 while(True): response = requests.get("https://www.xxx.com/") # 正則匹配文本 match = re.findall(r"([sS]*?)
", response.text) if match: sql = "INSERT INTO `sexy` (`content`) VALUES ("%s")" % (match[0]) try: # 執行sql語句 cursor.execute(sql) # 提交到數據庫執行 db.commit() except: # 如果發生錯誤則回滾 db.rollback() # 輸出sql語句到控制臺 print(sql) else: # 輸出html代碼到控制臺 print(response.text)
運行演示:
數據庫內容:
python是個好東西,萬物based on python。
感覺教程貼比較難寫,每個地方都有細節,但如果講細了文章又太繁瑣,若簡單些不好取舍初學者又看不懂什么意思,向那些寫易懂的入門教程文章的作者致敬。
注:由于原網址不方便公布,代碼中的網址全部替換為了xxx.com。
源碼在Github中:https://github.com/st1ven/Pyt...,歡迎Star
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41301.html
摘要:引言本文簡單講解一下的架構。沒錯,開源的通用提取器就是要集成到架構中,最看重的是的事件驅動的可擴展的架構。架構圖就是針對特定目標網站編寫的內容提取器,這是在通用網絡爬蟲框架中最需要定制的部分。 1. 引言 本文簡單講解一下Scrapy的架構。沒錯,GooSeeker開源的通用提取器gsExtractor就是要集成到Scrapy架構中,最看重的是Scrapy的事件驅動的可擴展的架構。除了...
摘要:而分配任務的是會員中心的爬蟲羅盤,實現集中管理分布執行。開源即時網絡爬蟲項目同樣也要盡量實現通用化。網址和提取規則本來應該硬編碼到中的,現在隔離出來,由會員中心進行管理,那么就很容易做通用了。 showImg(https://segmentfault.com/img/bVyEnS); 1,引言 《Scrapy的架構初探》一文所講的Spider是整個架構中最定制化的一個部件,Spider...
摘要:首先介紹是一個庫,他提供了一組用來操縱的默認也就是無的,也可以配置為有有點類似于,但是官方團隊進行維護的,前景更好。使用,相當于同時具有和的能力,應用場景會非常多。 首先介紹Puppeteer Puppeteer是一個node庫,他提供了一組用來操縱Chrome的API(默認headless也就是無UI的chrome,也可以配置為有UI) 有點類似于PhantomJS,但Puppet...
摘要:獲取獲取上下文句柄執行計算銷毀句柄除此之外,還可以使用意為在瀏覽器環境執行腳本,可傳入第二個參數作為句柄,而則針對選中的一個元素執行操作。 我們日常使用瀏覽器或者說是有頭瀏覽器時的步驟為:啟動瀏覽器、打開一個網頁、進行交互。 無頭瀏覽器指的是我們使用腳本來執行以上過程的瀏覽器,能模擬真實的瀏覽器使用場景。 有了無頭瀏覽器,我們就能做包括但不限于以下事情: 對網頁進行截圖保存為圖片或 ...
摘要:,引言的架構初探一文講解了的架構,本文就實際來安裝運行一下爬蟲。第一次運行的測試成功,接下來的工作接下來,我們將使用來實現網絡爬蟲,省掉對每個人工去生成和測試的工作量。,文檔修改歷史,首次發布 1,引言 《Scrapy的架構初探》一文講解了Scrapy的架構,本文就實際來安裝運行一下Scrapy爬蟲。本文以官網的tutorial作為例子,完整的代碼可以在github上下載。 2,運行環...
閱讀 2793·2021-10-11 10:57
閱讀 2402·2021-08-27 16:20
閱讀 1384·2019-08-30 13:03
閱讀 1563·2019-08-30 12:50
閱讀 3336·2019-08-29 14:16
閱讀 1561·2019-08-29 11:12
閱讀 1613·2019-08-28 17:53
閱讀 2893·2019-08-27 10:58