初探python之做一個簡單小爬蟲

準備工作

初探python干毅,這個文章屬于自己的一個總結款侵。所以教程面向新手酥泛,無技術含量砰奕。
python環(huán)境Linux基本都有憨奸,Windows下官網也提供了便利的安裝包捺氢,怎么安裝配置網上有很多教程在此就不一一說明滩褥。
我使用的python版本為Python 3.6.4竞帽,后面的代碼也是基于python3的虽界。

分析需求

做一個小爬蟲離不開獲取網頁內容和匹配存儲內容汽烦,那么我們先裝上python爬蟲的老朋友requests:
pip install requests
再裝上pymysql擴展,方便將匹配到的內容插入到mysql數(shù)據庫中:
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/abyteofpython_cn/ch04.html
如果已經有了編碼基礎但對縮進這方面沒有深究,可以看python的縮進規(guī)范:http://www.kuqin.com/abyteofpython_cn/ch04s09.html

好人乓,寫完代碼之后我們拿到控制臺試一下勤篮,完美輸出html代碼


requests
requests

第二步:正則匹配內容

既然能夠獲取html代碼,那我們就要找出需要的部分色罚,這就用上了正則碰缔。Python 自1.5版本起增加了 re 模塊,它提供 Perl 風格的正則表達式模式戳护。具體細節(jié)可以在菜鳥教程中查看:http://www.runoob.com/python/python-reg-expressions.html金抡,話不多說再貼代碼:

# -*- coding:utf-8 -*-
# 加載 requests 模塊
import requests
# 加載 re 模塊
import re

response = requests.get('https://www.xxx.com/')
# 正則匹配文本
match = re.findall(r'<p><!--markdown-->([\s\S]*?)</p>', response.text)
if match:
    # 輸出匹配的內容到控制臺
    print(match[0])
else:
    # 輸出html代碼到控制臺
    print(response.text)
re
re

注:原網址為隨機一句文字顯示,每刷新一次就會變化一次腌且。

第三步:循環(huán)匹配并加入數(shù)據庫中

首先我們把數(shù)據庫和表做好梗肝,可以用sql語句創(chuàng)建:

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

# 打開數(shù)據庫連接
db = pymysql.connect('127.0.0.1', 'root', 'root', 'sentence', charset='utf8')
# 使用cursor()方法獲取操作游標
cursor = db.cursor()

#死循環(huán)到天長地久
while(True):
    response = requests.get('https://www.xxx.com/')
    # 正則匹配文本
    match = re.findall(r'<p><!--markdown-->([\s\S]*?)</p>', response.text)
    if match:
        sql = "INSERT INTO `sexy` (`content`) VALUES ('%s')" % (match[0])
        try:
           # 執(zhí)行sql語句
           cursor.execute(sql)
           # 提交到數(shù)據庫執(zhí)行
           db.commit()
        except:
           # 如果發(fā)生錯誤則回滾
           db.rollback()
        # 輸出sql語句到控制臺
        print(sql)
    else:
        # 輸出html代碼到控制臺
        print(response.text)

運行演示:


pymysql
pymysql

數(shù)據庫內容:


mysql
mysql

總結

python是個好東西巫击,萬物based on python
感覺教程貼比較難寫精续,每個地方都有細節(jié)坝锰,但如果講細了文章又太繁瑣,若簡單些不好取舍初學者又看不懂什么意思重付,向那些寫易懂的入門教程文章的作者致敬顷级。
注:由于原網址不方便公布,代碼中的網址全部替換為了xxx.com确垫。
源碼在Github中:https://github.com/st1ven/Python-Spider-Demo弓颈,歡迎Star

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市删掀,隨后出現(xiàn)的幾起案子翔冀,更是在濱河造成了極大的恐慌,老刑警劉巖爬迟,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橘蜜,死亡現(xiàn)場離奇詭異菊匿,居然都是意外死亡付呕,警方通過查閱死者的電腦和手機计福,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徽职,“玉大人象颖,你說我怎么就攤上這事∧范ぃ” “怎么了说订?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長潮瓶。 經常有香客問我陶冷,道長,這世上最難降的妖魔是什么毯辅? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任埂伦,我火速辦了婚禮,結果婚禮上思恐,老公的妹妹穿的比我還像新娘沾谜。我一直安慰自己,他們只是感情好胀莹,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布基跑。 她就那樣靜靜地躺著,像睡著了一般描焰。 火紅的嫁衣襯著肌膚如雪媳否。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天荆秦,我揣著相機與錄音逆日,去河邊找鬼。 笑死萄凤,一個胖子當著我的面吹牛室抽,可吹牛的內容都是我干的。 我是一名探鬼主播靡努,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼坪圾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惑朦?” 一聲冷哼從身側響起兽泄,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漾月,沒想到半個月后病梢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年蜓陌,在試婚紗的時候發(fā)現(xiàn)自己被綠了觅彰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡钮热,死狀恐怖填抬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情隧期,我是刑警寧澤飒责,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站仆潮,受9級特大地震影響宏蛉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜性置,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一檐晕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚌讼,春花似錦辟灰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凰萨,卻和暖如春继控,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胖眷。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工武通, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人珊搀。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓冶忱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親境析。 傳聞我的和親對象是個殘疾皇子囚枪,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,444評論 6 428
  • Python 面向對象Python從設計之初就已經是一門面向對象的語言,正因為如此劳淆,在Python中創(chuàng)建一個類和對...
    順毛閱讀 4,210評論 4 16
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,963評論 1 3
  • 占小便宜吃大虧链沼。深知其中道理。前東家年會送的JBL電腦音箱沛鸵,不到一年壞了括勺,幾百塊的東西,電話咨詢客服,或許能修理疾捍,...
    NemoX閱讀 110評論 0 0
  • 前言 開發(fā)中電腦突然出問題奈辰,然后出現(xiàn)一個incrementalFolder=null的編譯失敗問題,刪除.grad...
    crossroads閱讀 265評論 0 1