準備工作
初探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代碼
第二步:正則匹配內容
既然能夠獲取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)
注:原網址為隨機一句文字顯示,每刷新一次就會變化一次腌且。
第三步:循環(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)
運行演示:
數(shù)據庫內容:
總結
python是個好東西巫击,萬物based on python。
感覺教程貼比較難寫精续,每個地方都有細節(jié)坝锰,但如果講細了文章又太繁瑣,若簡單些不好取舍初學者又看不懂什么意思重付,向那些寫易懂的入門教程文章的作者致敬顷级。
注:由于原網址不方便公布,代碼中的網址全部替換為了xxx.com确垫。
源碼在Github中:https://github.com/st1ven/Python-Spider-Demo弓颈,歡迎Star