一:建立一个Scrapy爬虫工程
打开cmd:输人scrapy startproject python123,如下截图:
这里输入的意思是定义一个工程,它的名字叫python123.
此时在d盘中可以看到生成的scrapy的工程
介绍上述文件的作用:
scrapy.cfg 这个配置,是将爬虫放在特定的服务器上,并且在服务器配置好相关的操作接口.对于本机使用爬虫,不需要改变部署的配置文件.
init.py 用户不需要编写
items.py 需要继承scrapy库提供的ietms类,对于一般的例子用户不需要编写
middlewares.py 如果用户需要扩展middlewares的功能,则需要编写.
pipelines.py 指的是框架中的pipelines模块
settings.py 指的是Scrapy爬虫的文件,如果需要优化爬虫,则需要设置这个文件对应的配置项.
spiders 是在存放python123demo工程建立的爬虫
二:在工程中产生一个Scrapy爬虫
输入命令:scrapy genspider demo python123.io
三、配置产生的spider爬虫
在文件当中生成了一个demo.py文件,然后对该文件进行修改,代码如下:
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
#allowed_domains = ['python123.io']
start_urls = ['http://python123.io/ws/demo.html']
def parse(self, response):
fname=response.url.split('/')[-1]
with open(fname,'wb') as f:
f.write(response.body)
self.log('Save file %s.' %fname)
1 )是一个面向对象编写的类,这个类叫DemoSpider
2 )由于我们的名字叫demo,所以这个类名也叫demospider,名字也可以叫我们任何想叫的名字.
3 )这个类必须是继承与scrapy.Spider的子类.
4 )这里有个变量叫name,被赋值为demo,说明当前爬虫的名字叫demo.
5 )allowed_domains这个是用户提交给命令行的命名.这个爬虫在爬取网站的时候只能爬取这个域名以下的相关链接.
6 )start_urls以列表的形式包含一个或多个url就是scrapy框架要爬取的初始页面.
7 )def parse是解析页面一个空的方法.
8 )pass是处理响应,可以解析从网上爬取的内容,并形成字典类型,同时对网络中爬取的内容发现其中隐含的新的url.
程序的改进,使用yield生成器:
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
def start_requests(self):
urls=[
'http://python123.io/ws/demo.html'
]
for url in urls:
yield scrapy.Request(url=url,callback=self.parse)
def parse(self, response):
fname=response.url.split('/')[-1]
with open(fname,'wb') as f:
f.write(response.body)
self.log('Save file %s.' %fname)
四、运行爬虫,获取网页
在命令行cmd执行这个命令,输入:crapy crawl demo
此时,就爬取成功了,在目录下生成了demo.html文件