spiders下的baidu.py是scrapy用命令(scrapy genspider baidu www.baidu.com)自动为我们生成的 。
内容如下:
import scrapyclass BaiduSpider(scrapy.Spider):name = 'baidu'allowed_domains = ['www.baidu.com']start_urls = ['http://www.baidu.com/']def parse(self, response):title = response.xpath('//html/dead/title/text()')print(title)
当然,可以不用命令生成,可以自己在spiders下创建爬虫,您必须继承 scrapy.Spider 类,且定义以下三个属性:
- name: 用于区别Spider 。该名字必须是唯一的,您不可以为不同的Spider设定相同的名字 。
- start_urls: 包含了Spider在启动时进行爬取的url列表 。因此,第一个被获取到的页面将是其中之一 。后续的URL则从初始的URL获取到的数据中提取 。
- parse() 是spider的一个方法 。被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数 。该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象 。
运行方法:
在项目目录底下用命令运行,如下,我项目目录 D:PythonScrapyDemmo,运行name为baidu的爬虫
D:PythonScrapyDemmo> scrapy crawl baidu
在scrapy中,为了避免每一次运行或调试都输入一串命令,可以在项目文件下新建一个run.py文件,每次运行爬虫只需要运行此脚本即可 。且运行调试模式也需要设置此启动脚本 。
from scrapy import cmdlinecmdline.execute("scrapy crawl baidu".split())
最后运行这个run.py即可,执行结果:D:PythonvenvScriptspython.exe D:PythonScrapyDemmoScrapyDemmorun.py 2022-10-28 10:12:55 [scrapy.utils.log] INFO: Scrapy 2.7.0 started (bot: ScrapyDemmo)2022-10-28 10:12:55 [scrapy.utils.log] INFO: Versions: lxml 4.9.1.0, libxml2 2.9.12, cssselect 1.1.0, parsel 1.6.0, w3lib 2.0.1, Twisted 22.8.0, Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)], pyOpenSSL 22.1.0 (OpenSSL 3.0.5 5 Jul 2022), cryptography 38.0.1, Platform Windows-10-10.0.22000-SP02022-10-28 10:12:55 [scrapy.crawler] INFO: Overridden settings:{'BOT_NAME': 'ScrapyDemmo', 'NEWSPIDER_MODULE': 'ScrapyDemmo.spiders', 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['ScrapyDemmo.spiders'], 'TWISTED_REACTOR': 'twisted.inte.NET.asyncioreactor.AsyncIOSelectorReactor'}2022-10-28 10:12:55 [asyncio] DEBUG: Using selector: SelectSelector......
若嫌弃scrapy日志文件太杂乱,想无日志输出,只需在后面增加--nolog即可:from scrapy import cmdlinecmdline.execute('scrapy crawl baidu --nolog'.split())
执行导出为json或scv格式,执行爬虫文件时添加-o选项即可scrapy crawl 项目名 -o *.csv
scrapy crawl 项目名 -o *.json
对于json文件,在setting.js文件里添加,设置编码格式,否则会乱码:
from scrapy import cmdline cmdline.execute('scrapy crawl baidu -o baidu.csv'.split())
四、Scrapy配置文件settings.py默认配置文件,主要设置参数:BOT_NAME = 'ScrapyDemmo' #Scrapy项目的名字,这将用来构造默认 User-Agent,同时也用来log,当您使用 startproject 命令创建项目时其也被自动赋值 。SPIDER_MODULES = ['ScrapyDemmo.spiders'] #Scrapy搜索spider的模块列表 默认: [xxx.spiders]NEWSPIDER_MODULE = 'ScrapyDemmo.spiders' #使用 genspider 命令创建新spider的模块 。默认: 'xxx.spiders'#爬取的默认User-Agent,除非被覆盖 #USER_AGENT = 'ScrapyDemmo (+http://www.yourdomain.com)'#如果启用,Scrapy将会采用 robots.txt策略 ROBOTSTXT_OBEY = True#Scrapy downloader 并发请求(concurrent requests)的最大值,默认: 16 #CONCURRENT_REQUESTS = 32#为同一网站的请求配置延迟(默认值:0) # See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay# See also autothrottle settings and docs#DOWNLOAD_DELAY = 3 #下载器在下载同一个网站下一个页面前需要等待的时间,该选项可以用来限制爬取速度,减轻服务器压力 。同时也支持小数:0.25 以秒为单位#下载延迟设置只有一个有效 #CONCURRENT_REQUESTS_PER_DOMAIN = 16#对单个网站进行并发请求的最大值 。#CONCURRENT_REQUESTS_PER_IP = 16 #对单个IP进行并发请求的最大值 。如果非0,则忽略#禁用Cookie(默认情况下启用) #COOKIES_ENABLED = False#禁用Telnet控制台(默认启用) #TELNETCONSOLE_ENABLED = False#覆盖默认请求标头:#DEFAULT_REQUEST_HEADERS = {#'Accept': 'text/html,Application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',#'Accept-Language': 'en',#}#项目管道,300为优先级,越低越爬取的优先度越高# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html#ITEM_PIPELINES = {#'ScrapyDemmo.pipelines.ScrapydemmoPipeline': 300,#}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- python + selenium实现gitlab全文搜索
- 王冰冰|王冰冰要回来了!加盟《国之大雅》节目,土土却阴阳怪气内涵王冰冰
- 普洱茶中异味,普洱茶品鉴之闻茶
- 郭希宽|许敏提前出院是另有隐情?郭希宽回应网友质疑,偷换之说再添疑点
- 俄罗斯地狱之门40秒 俄罗斯地狱之声40秒辟谣
- 心理学动物效应之鲶鱼效应 鲇鱼效应
- 孙芸芸|小S蔡康永眼中的“天之娇女”台湾第一名媛孙芸芸活得有多清醒?
- 如何学习音标之元音【1】
- 值得买的办公笔记本 5000以下的办公笔记本性价比之王
- 北京属于中国八大古都之一吗 北京是我国著名的四大古都