Python的爬虫框架介绍

scrapy 爬虫框架简介

命令行参数

  • 启动一个新的爬虫项目 scrapy startproject smzdm

  • 创建一个新的spider scrapy genspider domain domain.com

    在 spider 目录下创建domain 的文件,代码如下

  • 进入命令行模式,直接爬取一个 url, 并返回结果对象 scrapy shell xxx-url

  • 开始执行爬虫项目 scrapy crawl smzdm, 必须在项目中执行语句
  • 查看该项目中的具体爬虫有哪些 scrapy list, 必须在项目中执行语句
  • 直接打开编辑器修改某一个具体的 spider, scrapy edit smzdm, 必须在项目中执行语句
  • 查看spider如何获取某个特定页面,排查爬虫看到的页面是否就是我们浏览器看到的页面, scrapy view xxx-url
  • 使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出, scrapy fetch xxx-url
  • 在未创建项目的情况下,运行一个编写在Python文件中的spider, scrapy runspider xxx.py
  • 查看 scrapy 版本, scrapy version -v, 配合 -v运行时,该命令同时输出Python, Twisted以及平台的信息

item

类似 flask 中的 model 模块,用来定义爬取下来的数据分类

1
2
3
4
5
class SmzdmItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
good = scrapy.Field()
price = scrapy.Field()

spider

爬虫的主体,用来爬取 url, 并返回页面的数据对象,根据 xpath 来解析,默认使用 parse 方法来回调

1
2
3
4
5
6
7
8
9
10
11
12
class MySpider(scrapy.Spider):
name = "smzdm"
start_urls = ["http://search.smzdm.com/?c=faxian&s=Nintendo Switch&v=a"]

def parse(self, response):
# We want to inspect one specific response.
items = response.xpath("//div/ul[@id='feed-main-list']/li")
for item in items:
info = SmzdmItem()
info["good"] = item.xpath(".//h5[@class='feed-block-title']/a/text()").extract_first()
info["price"] = item.xpath(".//a/div[@class='z-highlight']/text()").extract_first()
yield info

pipeline

主要用来区分 parse 方法解析出来的数据,进行下一步的操作,比如说筛选,存入数据库等

1
2
3
4
5
6
7
8
class SmzdmPipeline(object):

def __init__(self):
self.file = open('items', 'wb')

def process_item(self, item, spider):
line = item['good'].strip() + ":" + item['price'] + '\n'
print(line)