图片链接用src不能被爬虫爬到吗_第8天 | 10天搞定Python网络爬虫,才爬一个校花?

有了Scrapy之后,爬数据确实轻松了不少。用相同的姿势,爬文字方便,爬图也方便,特别是校花(图片下载地址)。我知道,一说到美女,一说到校花,你就不想再听我啰嗦,不想再听我多说一句话,我懂的,你不用掩饰了,代码马上就来。

8.1 新建项目

打开命令行窗口(或终端),输入:scrapy startproject belle,新建项目并用cd命令进到belle目录下。输入:scrapy genspider peri http://www.xiaohuar.com,生成爬虫代码。用PyCharm打开项目,在spiders目录下,新建run.py文件。项目结构如下,自己核对一下。

图片链接用src不能被爬虫爬到吗_第8天 | 10天搞定Python网络爬虫,才爬一个校花?_第1张图片

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 = ['http://www.xiaohuar.com']    start_urls = ['http://www.xiaohuar.com']    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())

输出结果(部分)

图片链接用src不能被爬虫爬到吗_第8天 | 10天搞定Python网络爬虫,才爬一个校花?_第2张图片

好了,有关scrapy爬取校花的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。分享Python,前端(小程序)、App和嵌入式方面的干货。关注我,没错的。

#python##网络爬虫##程序员##爬虫##校花#

你可能感兴趣的:(图片链接用src不能被爬虫爬到吗_第8天 | 10天搞定Python网络爬虫,才爬一个校花?)