1. 程式人生 > >構建爬蟲系統

構建爬蟲系統

構建爬蟲系統(一)

一、實現目的

前面提到,我們的目標是構建一個基於技術部落格的垂直搜尋引擎,正所謂路要一步一步走,專案也要一節一節來,本節的目的很簡單,就是帶你構建搜尋引擎的基石——可靠的爬蟲系統。

爬蟲是文件的重要來源,所以這一節也比較重要,我會從爬蟲的基礎講起,爬蟲的構成,如何編寫爬蟲等等,希望大家能跟著文件一步步動手做下去。

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功能快速定位元素位置

  •