大佬教程收集整理的这篇文章主要介绍了20行Python scrapy 代码,去采集【蓝桥】训练营,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
scrapy 中的 setTings.py
文件在项目中是非常重要的c;因其包含非常多的配置。 这篇博客基于官方手册为你说明 setTings.py
文件相关配置c;并补充一些扩展说明。
scrapy crawl my_spider -s LOG_LEVEL=WARNINI
;xxx.py
文件中设置 custom_setTings
;setTings.py
文件中的配置;default_setTings
属性配置;default_setTings.py
文件中的配置。
setTings
配置的读取c;一般使用spider
中的from_crawler
方法c;在中间件c;管道c;扩展中都可以进行调用。
setTings
配置读取操作非常简单c;上一篇博客已经有所涉及c;命令格式如下所示:
scrapy setTings --get 配置变量名称
BOt_name
:爬虫名称;SPIDER_MODULES
:爬虫模块列表;NEWSPIDER_MODULE
:模块在哪里使用 genspider
命令创建新的爬虫;scrapy 日志与 logging
模块一致c;使用 5 个级别: 配置名为 LOG_LEVEL
c;最低的是 DEBUG(默认)c;INFOc;WARNINGc;ERRORc;CRITICAL(最高)。 其余日志相关配置如下c;
LOGSTATS_INTERVAL
:设置日志频率c;默认是 60 秒c;可以修改为 5 秒c;LOG_FILE
:日志文件;LOG_ENABLED
:是否启用日志c;关闭了运行爬虫c;就啥都不输出了;LOG_ENCODING
:编码;LOG_FORMAT
:日志格式c;这个可以参考 logging
模块学习;LOG_DATEFORMAT
:同上c;负责格式化日期/时间;STATS_DUMP
:默认开启c;爬虫采集完毕c;将爬虫运行信息统计并输出到日志;DOWNLOADER_STATS
:启用下载中间件统计;DEPTH_STATS
和 DEPTH_STATS_VERBOSE
:统计深度相关设置;STATsmaILER_RCPTS
:爬虫采集完毕c;发送邮箱列表。CONCURRENT_requESTS
:最大并发请求数c;抓取不同网站时使用c;该值默认是 16c;如果一次请求耗时 0.2 秒c;则并发极限是 16/0.2 = 80 次请求CONCURRENT_requESTS_PER_DOMAIN
和 CONCURRENT_requESTS_PER_IP
:单个域或者单个 IP 的最大并发请求数;CONCURRENT_ITEMS
:每次请求并发处理的最大文件数c;如果 CONCURRENT_requESTS=16
c;CONCURRENT_ITEMS=100
c;则表示每秒有 1600 个文件会被写入数据库;DOWNLOAD_TIMEOUT
:下载器在超时前等待的时间量;DOWNLOAD_DELAY
:下载延迟c;限制爬取速度c;配合 RANDOMIZE_DOWNLOAD_DELAY
使用c;会使用一个随机值 * DOWNLOAD_DELAY
;CLOSESPIDER_TIMEOUT
c;CLOSESPIDER_ITEMCOUNT
c;CLOSESPIDER_PageCount
c;CLOSESPIDER_ERRORCOUNT
:四个配置比较类似c;都是为了提前关闭爬虫c;分别为时间c;抓取 item 的数量c;发出一定的请求数c;发生一定的错误量。user_ageNT
:用户代理;DEPTH_LIMIT
:抓取的最大深度c;在深度抓取时有用;ROBOTSTXT_OBEY
:是否遵守 robots.txt
约定;COOKIES_ENABLED
:是否禁用 cookiec;禁用之后有时能提高采集速度;DEFAULT_requEST_HEADERS
:请求头;IMAGES_STORE
:使用 ImagePipeline
时图片的存储路径;IMAGES_MIN_WIDTH
和 IMAGES_MIN_HEIGHT
:筛选图片;IMAGES_THUMBS
:设置缩略图;FILES_STORE
:文件存储路径;FILES_URLS_FIELD
与 FILES_RESULT_FIELD
:使用 Files Pipeline
时的一些变量名配置;URLLENGTH_LIMIT
:允许抓取网站地址的最大长度。ITEM_PIPELInes
:管道配置;COMMANDS_MODULE
:自定义命令;DOWNLOADER_MIDDLEWARES
:下载中间件;scheDULER
:调度器;EXTENSIONS
:扩展;SPIDER_MIDDLEWARES
:爬虫中间件;RETRY_*
:设置了 Retry 相关中间件配置;REDIRECT_*
:设置了 Redirect 相关中间件配置;这一次的爬虫就采集蓝桥训练营的课程吧c;页面经过测试得到的请求地址如下:
https://www.lanqiao.cn/api/v2/courses/?page_size=20&page=2&include=html_url,name,description,students_count,fee_type,picture_url,id,label,online_type,purchase_seconds_info,level
其中参数除了 page_size
和 page
以外c;还存在一个 include
参数c;这也是接口中常用的一个参数c;其值代表接口返回哪些字段(包含哪些属性)c;如下图所示。
lanqiao.py 文件代码
import json
import scrapy
from lq.items import LqItem
class @H_673_330@LanqiaoSpider(scrapy.Spider):
name = 'lanqiao'
allowed_domains = ['lanqiao.cn']
def start_requests(self):
url_format = 'https://www.lanqiao.cn/api/v2/courses/?page_size=20&page={}&include=html_url,name,description,students_count,fee_type,picture_url,id,label,online_type,purchase_seconds_info,level'
for page in range(1, 34):
url = url_format.format(page)
yield scrapy.request(url=url, callBACk=self.parse)
def parse(self, response):
json_data = json.loads(response.text)
for ret_item in json_data["results"]:
item = LqItem(**ret_item)
yield item
代码中直接将 ret_item
赋值到了 LqItem
的构造函数中c;实现对字段的赋值。
items.py 文件代码
该类主要对数据字段进行限制。
import scrapy
class @H_673_330@LqItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
html_url = scrapy.Field()
name = scrapy.Field()
description = scrapy.Field()
students_count = scrapy.Field()
fee_type = scrapy.Field()
picture_url = scrapy.Field()
id = scrapy.Field()
label = scrapy.Field()
online_type = scrapy.Field()
purchase_seconds_info = scrapy.Field()
level = scrapy.Field()
BOt_name = 'lq'
SPIDER_MODULES = ['lq.spiders']
NEWSPIDER_MODULE = 'lq.spiders'
user_ageNT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
ROBOTSTXT_OBEY = false
CONCURRENT_requESTS = 16
DOWNLOAD_DELAY = 3
爬虫运行结果:
今天是持续写作的第 254 / 365 天。 期待 关注c;点赞、评论、收藏。
更多精彩
《爬虫 100 例c;专栏销售中c;买完就能学会系列专栏》
以上是大佬教程为你收集整理的20行Python scrapy 代码,去采集【蓝桥】训练营全部内容,希望文章能够帮你解决20行Python scrapy 代码,去采集【蓝桥】训练营所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。