構建爬蟲系統
阿新 • • 發佈:2019-12-19
構建爬蟲系統(一)
一、實現目的
前面提到,我們的目標是構建一個基於技術部落格的垂直搜尋引擎,正所謂路要一步一步走,專案也要一節一節來,本節的目的很簡單,就是帶你構建搜尋引擎的基石——可靠的爬蟲系統。
爬蟲是文件的重要來源,所以這一節也比較重要,我會從爬蟲的基礎講起,爬蟲的構成,如何編寫爬蟲等等,希望大家能跟著文件一步步動手做下去。
1.1 實驗知識點
-
爬蟲的基本概念
-
非同步爬蟲框架ruia的使用介紹
-
基於ruia構造非同步爬蟲系統
1.2 實驗環境
-
Python 3.6+
-
MongoDB
二、開發準備
# 建立專案程式碼目錄
mkdir -p ~/Code/monkey
# 進入專案根目錄
cd ~/Code/monkey
# 建立一個名叫env的虛擬環境(注:Python3自帶pyenv)
python3 -m venv env
# 啟用虛擬環境
source env/bin/activate
# 安裝專案依賴的包
pip install -r source env/bin/active
三、小試牛刀
3.1 使用requests + lxml爬取網頁
# 注:以下程式碼未經過執行測試,只是手寫思路
import requests
from lxml import etree
url = 'https://movie.douban.com/subject/1292052/'
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Safari/605.1.15"
}
r = requests.get(url,headers=headers)
tree = etree.HTML(r.text)
el = tree.xpath('//*[@id="content"]/h1/span[1]/text()')
print(el)
3.2 使用ruia框架爬取網頁
import asyncio
from ruia import Item, TextField
class DoubanItem(Item):
"""
定義爬蟲的目標欄位
"""
title = TextField(css_select='#content > h1 > span:nth-child(1)')
async_func = DoubanItem.get_item(url="https://movie.douban.com/subject/1292052/")
item = asyncio.get_event_loop().run_until_complete(async_func)
print(item.title)
主要內容總結
-
掌握快速學習的能力,任何框架都是那麼容易
-
做專案時,一定要用虛擬環境,學會使用pip freeze >> requirements.txt命令,學會使用pip install -r requirements.txt
我們通常會把專案依賴的環境命名為“requirements.txt"
-
學會借力:例如,藉助瀏覽器的copy xpath功能快速定位元素位置
-