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

準備工做

初探python,這個文章屬於本身的一個總結。因此教程面向新手,無技術含量。 python環境Linux基本都有,Windows下官網也提供了便利的安裝包,怎麼安裝配置網上有不少教程在此就不一一說明。 我使用的python版本爲Python 3.6.4,後面的代碼也是基於python3的。php

分析需求

作一個小爬蟲離不開獲取網頁內容和匹配存儲內容,那麼咱們先裝上python爬蟲的老朋友requests: pip install requests 再裝上pymysql擴展,方便將匹配到的內容插入到mysql數據庫中: pip install pymysqlhtml

第一步:獲取網頁內容

在python中有意思的是你須要什麼,就去import什麼,不像php同樣獲取網頁內容直接來個file_get_contents完事兒 廢話很少說,貼出代碼來看一下:python

# -*- 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的縮進規範:http://www.kuqin.com/abyteofpython_cn/ch04s09.htmlmysql

好,寫完代碼以後咱們拿到控制檯試一下,完美輸出html代碼 requestsgit

第二步:正則匹配內容

既然可以獲取html代碼,那咱們就要找出須要的部分,這就用上了正則。Python 自1.5版本起增長了 re 模塊,它提供 Perl 風格的正則表達式模式。具體細節能夠在菜鳥教程中查看:http://www.runoob.com/python/python-reg-expressions.html,話很少說再貼代碼:github

# -*- 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

注:原網址爲隨機一句文字顯示,每刷新一次就會變化一次。正則表達式

第三步:循環匹配並加入數據庫中

首先咱們把數據庫和表作好,能夠用sql語句建立: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'<p><!--markdown-->([\s\S]*?)</p>', 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)

運行演示: pymysql 數據庫內容: mysqlexpress

總結

python是個好東西,萬物based on python。 感受教程貼比較難寫,每一個地方都有細節,但若是講細了文章又太繁瑣,若簡單些很差取捨初學者又看不懂什麼意思,向那些寫易懂的入門教程文章的做者致敬。 注:因爲原網址不方便公佈,代碼中的網址所有替換爲了xxx.com。 源碼在Github中:https://github.com/st1ven/Python-Spider-Demo,歡迎Star

相關文章
相關標籤/搜索