构建爬虫系统(一)

一、实现目的

前面提到,我们的目标是构建一个基于技术博客的垂直搜索引擎,正所谓路要一步一步走,项目也要一节一节来,本节的目的很简单,就是带你构建搜索引擎的基石——可靠的爬虫系统。

爬虫是文档的重要来源,所以这一节也比较重要,我会从爬虫的基础讲起,爬虫的构成,如何编写爬虫等等,希望大家能跟着文档一步步动手做下去。

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

  •  

版权声明:本文为djl-0628原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/djl-0628/p/12068254.html