Scrapy爬虫——创建第一个爬虫

逃离我推掉我的手 2023-07-24 13:05 123阅读 0赞

一、演示的HTML页面

URL:http://python123.io/ws/demo.html

内容:

20200411194213313.png

二、产生步骤

步骤1:建立一个Scrapy爬虫工程

桌面存在空文件夹Scrapy,cmd进入到Desktop\Scrapy中

输入“scrapy startproject python123demo”创建项目,名为python123demo。

20200411195904655.png

创建后的文件夹内容:

20200411200405903.png

其中,scrapy.cfg:部署Scrapy爬虫的配置文件,不需要用户修改

python123demo:框架的用户自定义Python代码

python123demo文件夹中的内容:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xZXzYyNA_size_16_color_FFFFFF_t_70

其中,_init_.py:初始化脚本,用户不需要编写

items.py:Items代码模板(继承类),一般不需要用户编写

middlewares.py:Middlewares代码模板(继承类),若用户需要扩展中间件功能,则编写

pipelines.py:Pipelines代码模板(继承类)

settings.py:Scrapy爬虫的配置文件,若要优化爬虫功能,则修改相应的配置项

spiders:Scrapy代码模板目录(继承类)

spiders文件中的内容:

20200411201730886.png

其中,__init__.py:初始文件,无需修改

__pycache__:缓存目录,无需修改

步骤2:在工程中产生一个Scrapy爬虫

进入工程目录,输入命令:scrapy genspider demo python123.io产生爬虫

20200411202543762.png

结果:在spiders文件夹下,产生了一个demo.py

20200411202722877.png

注意:上述命令作用仅限于生成demo.py,也就是说,也可以手动生成demo.py

demo.py文件内容:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xZXzYyNA_size_16_color_FFFFFF_t_70 1

name = ‘demo’ #名字

allowed_domains = [‘python123.io’] #给的域名,只能爬取本域名以下的内容

start_urls = [‘http://python123.io/'\] #列表中的N个URL,就是爬取的N个初始页面

parse():用于处理响应,解析内容形成字典,发现新的URL爬取请求。

步骤3:配置产生的spider爬虫

用户修改demo.py,使之能访问URL,并爬取相应的内容。

本项目将返回的HTML页面存成文件

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. class DemoSpider(scrapy.Spider):
  4. name = 'demo' #名字
  5. #allowed_domains = ['python123.io'] #给的域名,只能爬取本域名以下的内容
  6. start_urls = ['http://python123.io/ws/demo.html'] #列表中的N个URL,就是爬取的N个初始页面
  7. def parse(self, response): #将返回对象response的内容,写到HTML文件中
  8. fname=response.url.split('/')[-1] #提取的是文件名字demo.html
  9. with open(fname,'wb') as f:
  10. f.write(response.body)
  11. sel .log('Saved file %s.'%name) #日志

输入“scrapy crawl demo”,运行爬虫

20200411210722288.png

结果:在工程目录下,产生一个demo.html网页文件

20200411210436488.png

三、完整版本代码

将下述代码升级

升级前:

  1. name = 'demo' #名字
  2. start_urls = ['http://python123.io/ws/demo.html'] #列表中的N个URL,就是爬取的N个初始页面

升级后:

  1. name = 'demo' #名字
  2. def start_requests(self):
  3. urls=[
  4. 'http://python123.io/ws/demo.html'
  5. ]
  6. for url in urls:
  7. yield scrapy.Request(url=url,callback=self.parse)

发表评论

表情:
评论列表 (有 0 条评论,123人围观)

还没有评论,来说两句吧...

相关阅读