演示HTML地址
演示HTML页面地址:http://python123.io/ws/demo.html
文件名称:demo.html
- 产生步骤:
- 步骤1:建立一个Scrapy爬虫工程
按住shift键右键进入文件夹命令行
输入scrapy startproject python123demo- 生成的工程目录:
- python123demo/ ------------------------>外层目录
- scrapy.cfg ------------------->部署Scrapy爬虫的配置文件(将这样的爬虫放大特定的服务器上,并且在服务器配置好相关的操作接口,对于本机使用的爬虫来讲,不需要改变部署的配置文件)
- python123demo/ ---------->Scrapy框架的用户自定义python代码(Scrapy框架对应的所有文件所在的目录)
- scrapy.cfg ----------->部署Scrapy爬虫的配置文件
- python123demo/ --------->
- __init__.py--------------------->初始化脚本,用户不需要编写
- items.py --------------->Items代码模板(继承类),Items类代码模板,需要继承Scrapy库提供的Item的类,对于一般的例子,不需要用户编写这个文件
- middlewares.py ---------->Middlewares代码模板(继续类),用户希望扩展middlewares的功能,需要把这些功能写到这个文件中
- pipelines.py ------------->Pipelines代码模板(继承类)
- settings.py -------------->Scrapy爬虫的配置文件,如果希望优化爬虫功能。需要修改settings.py文件中对应的配置项
- spiders --------->Spiders代码模板目录(继承类),目录下存放的是python123demo这个工程中所建立的爬虫,其中的爬虫是要符合爬虫模块的约束
- __init__.py ---------->初始文件,无需修改
- __pycache__ --------->缓存目录,无需修改
- 生成的工程目录:
- 步骤2:在工程中产生一个Scrapy爬虫
命令约定用户需要给出爬虫的名字以及所爬取的网站
D:\pycodes>cd python123demo
D:\pycodes\python123demo>scrapy genspider demo python123.io#生成一个名称为demo的spider,也就是一个爬虫
Created spider 'demo' using template 'basic' in module:
python123demo.spiders.demo
查看demo.py文件
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):#这个类必须是继承scrapy.Spider类的子类
name = 'demo'#当前爬虫的名字叫demo
allowed_domains = ['python123.io']#最开始用户提交给命令行的域名,指的这个爬虫在爬取网站的时候,只能爬取这个域名以下的相关文件
start_urls = ['http://python123.io/']#以列表包含的一个或多个url,就是scrapy框架所要爬取页面的初始页面
def parse(self, response):#解析页面的空方法
pass
parse()用于处理相应,解析内容形成字典,发现新的URL爬取请求
- 步骤三:配置产生的spider
修改demo.py文件,使他能够按照我们的要求去访问我们希望访问的那个链接,并且对相关的链接内容进行爬取。
对链接的解析部分定义的功能是将返回的html页面存成文件
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):#这个类必须是继承scrapy.Spider类的子类
name = 'demo'#当前爬虫的名字叫demo
# allowed_domains = ['python123.io']#最开始用户提交给命令行的域名,指的这个爬虫在爬取网站的时候,只能爬取这个域名以下的相关文件
start_urls = ['http://python123.io/ws/demo/html']#以列表包含的一个或多个url,就是scrapy框架所要爬取页面的初始页面
#self面向对象类所属关系的标记,response相当于从网页返回内容所存储或对应的对象
#我们要将response的内容写到一个html文件中
def parse(self, response):#解析页面的空方法
#定义文件的名字
fname=response.url.split('/')[-1]
#将返回内容保存到文件
with open(fname, 'wb') as f:
f.write(response.body)
self.log('Saved file %s.' % name)
- 步骤4:运行爬虫,获取网页
- 打开命令行,使用crawl命令来执行叫demo的爬虫。捕获页面在demo.html文件中