大家好,又见面了,我是全栈君
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
创建项目
scrapy安装成功后打开cmd进入想要存储scrapy项目的目录使用startproject命令创建一个新项目:
代码语言:javascript复制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目录下会生成对应的架构目录树
代码语言:javascript复制scrapytest/
scrapy.cfg
scrapytest/
__init__.py
items.py #定义抓取域的模型
pipelines.py
settings.py #定义一些设置,如用户代理、爬取延时等
middlewares.py
__pycache__/
spiders/
__pycache__/
__init__.py
创建爬虫
使用genspider命令,传入爬虫模块名、域名以及可选模块参数
代码语言:javascript复制D:scraptest>scrapy genspider country example.webscraping.com
Created spider 'country' using template 'basic' in module:
scraptest.spiders.country
D:scraptestscraptestspiders目录下创建country.py
代码语言:javascript复制# -*- 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函数名不能修改,这是源码中指定的回调函数
测试爬虫
代码语言:javascript复制# -*- 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来设置日志信息
代码语言:javascript复制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
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120195.html原文链接:https://javaforall.cn