scrapy 从第一个爬虫开始

有时候学习的误区在于一直在看文档,一直在看基本的语法,从而导致很长时间不能看到学习的成果而灰心丧气;与其如此,不如拿实际的需求来学习,遇到不会的去查即可,当把需求完成后涉及的点再加以总结,效果会非常好,而且有成就感,正向激励自己。

本文讨论的是一个小爬虫,代码很少,就可以实现一个卡通图片网站(https://xkcd.com)的所有图片的抓取。

1 本地安装(win环境)
python 3.x(3.6.4),scrapy框架(1.5.1),至于如何安装,请google即可,遇到的问题都可以自己查到。

2 命令集合
其实是scrapy的命令集合

$ scrapy -h
Scrapy 1.5.1 - project: project

Usage:
  scrapy  [options] [args]

Available commands:
  bench         Run quick benchmark test
  check         Check spider contracts
  crawl         Run a spider
  edit          Edit spider
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  list          List available spiders
  parse         Parse URL (using its spider) and print the results
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

Use "scrapy  -h" to see more info about a command

3 创建爬虫项目

#利用下面两条命令执行
scrapy startproject project #创建了一个名为project的爬虫项目

cd /project/project/spiders 目录
scrapy genspider image #创建了一个名为image的爬虫

4 代码目录结构

scrapy.cfg:项目的配置文件
__init__.py:初始化文件,用来对项目做初始化工作
items.py:数据容器文件,用来定义要获取的数据
pipelines.py:管道文件,用来对items中的数据进行加工处理
settings.py:设置文件,包含了爬虫项目的设置信息
middlewares.py:中间件文件
spiders:爬虫目录,比如image.py就是所说的图片爬虫,由(3)中的第二个命令生成

scrapy 从第一个爬虫开始_第1张图片

5 代码分析
image.py文件分析

# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
from urllib import request
import urllib
import requests
import os

class ImageSpider(scrapy.Spider):
    name = 'image' #爬虫名称
    allowed_domains = ['xkcd.com'] #爬取网页域名

	#组装爬取网页url列表
    prefix = 'https://xkcd.com/'
    start_urls = []
    for i in range(1, 2050):
    	print(prefix + str(i) + '/')
    	start_urls.append(prefix + str(i) + '/')

    def parse(self, response):
    	for sel in response.xpath('//div[@id="comic"]'):
    		link = sel.xpath('img/@src').extract()

    		url = "https:" + link[0]
    		print('downloading picture:' + url)
    		self.downloadImages(url)  #定义图片下载方法

    #download images by url
    def downloadImages(self, url):

    	filename = os.path.basename(url)
    	headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}

    	response = requests.get(url, headers = headers)

    	path = 'C://pythonimages/' + filename
    	fp = open(path, 'wb')
    	fp.write(response.content)
    	fp.close()

本文只介绍了一个爬虫程序,后续将介绍爬虫框架等内容。

你可能感兴趣的:(python,Python与网络爬虫)