前言:
此刻大家对“异步实现crawl delay”大致比较关切,大家都需要学习一些“异步实现crawl delay”的相关资讯。那么小编也在网络上收集了一些对于“异步实现crawl delay””的相关内容,希望姐妹们能喜欢,朋友们快快来学习一下吧!有了Scrapy之后,爬数据确实轻松了不少。用相同的姿势,爬文字方便,爬图也方便,特别是校花(图片下载地址)。我知道,一说到美女,一说到校花,你就不想再听我啰嗦,不想再听我多说一句话,我懂的,你不用掩饰了,代码马上就来。
8.1 新建项目
打开命令行窗口(或终端),输入:scrapy startproject belle,新建项目并用cd命令进到belle目录下。输入:scrapy genspider peri ,生成爬虫代码。用PyCharm打开项目,在spiders目录下,新建run.py文件。项目结构如下,自己核对一下。
8.2 配置文件
爬虫用到的一些常用参数,直接在配置文件settings.py里,进行配置就好了。默认BOT_NAME、SPIDER_MODULES、NEWSPIDER_MODULE节点不用更改。
ROBOTSTXT_OBEY表示是否遵循robots.txt协议,设为True时,表示遵守。但遵守的话,大多数网站你将爬取不到数据。所以要改为False。
DOWNLOAD_DELAY从名字就可以知道,意思就是下载延迟时间。DEFAULT_REQUEST_HEADERS为请求头部信息。
另外如果你不喜欢每次都输出一大推提示信息的话,你可以用LOG_LEVEL设置日志的级别,如果想将日志输出到文件里的话,可配置LOG_FILE 节点。
重点的是ITEM_PIPELINES这个节点,不要忘记配置了,它指定了爬虫解析之后,数据的后续处理类,是保存到文件,还是数据库等。
BOT_NAME = 'belle'SPIDER_MODULES = ['belle.spiders']NEWSPIDER_MODULE = 'belle.spiders'ITEM_PIPELINES = { 'belle.pipelines.BellePipeline': 1,}ROBOTSTXT_OBEY = FalseDOWNLOAD_DELAY = 1DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'}LOG_LEVEL = "WARNING"
8.3 数据结构
打开items.py文件,加上图片名称和源(图片下载地址)的字段。items文件,主要起到用实体类传输数据的作用(Java开发时常用)。
from scrapy import Item, Fieldclass BelleItem(Item): # 图片源 img_set = Field()
8.4 数据后续处理
对传输过来的数据进行后续处理,是保存到文件,是保存到数据库,还是保存成图片等,就在这里处理。pipelines.py是PeriSpider的最佳搭档。用10位时间戳成为图片的名称,避免重名。
import requestsimport timeclass BellePipeline: def process_item(self, item, spider): for src in item["img_set"]: print(src) img = requests.get(src) # 10位时间戳 name = str(int(time.time())) + ".jpg" with open(name, "wb") as f: f.write(img.content) time.sleep(2)
8.5 爬虫功能实现
用xpath取标签里的属性时,用@属性名,在这里我们取图片的链接地址。用set存放是为了过滤掉重复的链接地址。
import scrapyfrom ..items import BelleItemfrom scrapy.selector import Selectorclass PeriSpider(scrapy.Spider): name = 'peri' allowed_domains = [';] start_urls = [';] def parse(self, response): img_set = set() items = BelleItem() selector = Selector(response) srcs = selector.xpath('// *[ @ class = "card-img-top"] /@src').extract() for src in srcs: img_set.add(src[1]) items["img_set"] = img_set yield items
8.6 爬起来爬起来
打开run.py文件,输入如下代码,运行之后就可以见到你做梦都想见到的校花们了。
from scrapy import cmdlinecmdline.execute('scrapy crawl peri'.split())
输出结果(部分)
好了,有关scrapy爬取校花的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。分享Python,前端(小程序)、App和嵌入式方面的干货。关注我,没错的。
#python##网络爬虫##程序员##爬虫##校花#
标签: #异步实现crawl delay