Scrapy库安装和项目创建
Scrapy是一个流行的网络爬虫框架,从现在起将陆续记录Python3.6下Scrapy整个学习过程,方便后续补充和学习。
本文主要介绍scrapy安装、项目创建和测试基本命令操作
scrapy库安装
使用pip命令安装scrapy,在安装过程中可能会因为缺少依赖库而报错,根据报错提示依次下载需要的依赖库,下载过程中注意系统类型和Python版本
我在安装过程中依次安装的库有:
pip install pywin32-223-cp36-cp36m-win32.whl
pip install Twisted-17.9.0-cp36-cp36m-win32.whl
pip install scrapy
Unofficial Windows Binaries for Python Extension Packages:https://www.lfd.uci.edu/~gohlke/pythonlibs/
创建项目
scrapy安装成功后打开cmd进入想要存储scrapy项目的目录使用startproject命令创建一个新项目:
D:\>scrapy startproject scraptest New Scrapy project 'scraptest', using template directory 'c:\\python36-32\\lib\\ site-packages\\scrapy\\templates\\project', created in: D:\scraptest You can start your first spider with: cd scraptest scrapy genspider example example.com
在D:\scraptest\目录下会生成对应的架构目录树
scrapytest/ scrapy.cfg scrapytest/ __init__.py items.py #定义抓取域的模型 pipelines.py settings.py #定义一些设置,如用户代理、爬取延时等 middlewares.py __pycache__/ spiders/ __pycache__/ __init__.py
创建爬虫
使用genspider命令,传入爬虫模块名、域名以及可选模块参数
D:\scraptest>scrapy genspider country example.webscraping.com Created spider 'country' using template 'basic' in module: scraptest.spiders.country
D:\scraptest\scraptest\spiders目录下创建country.py
# -*- coding: utf-8 -*- import scrapy class CountrySpider(scrapy.Spider): name = 'country' allowed_domains = ['example.webscraping.com'] start_urls = ['http://example.webscraping.com/'] def parse(self, response): pass
1. name作为爬虫名,必须指定名称,根据源码内容,若值为空会提示ValueErro
2. start_urls位爬取的网页
3. parse函数名不能修改,这是源码中指定的回调函数
测试爬虫
# -*- coding: utf-8 -*- import scrapy from lxml import etree class CountrySpider(scrapy.Spider): name = 'country' allowed_domains = ['example.webscraping.com'] start_urls = ['http://example.webscraping.com/places/default/view/Afghanistan-1'] #该函数名不能改变,因为scrapy源码中默认callback函数的函数名就是parse def parse(self, response): tree = etree.HTML(response.text) for node in (tree.xpath('//tr/td[@class="w2p_fw"]')): print (node.text)
使用crawl命令,可以根据-s LOG_LEVEL=DEBUG或-s LOG_LEVEL=ERROR来设置日志信息
D:\scraptest>scrapy crawl country --nolog None 647,500 square kilometres 29,121,286 AF Afghanistan Kabul None .af AFN Afghani 93 None None fa-AF,ps,uz-AF,tk None