python3.6+scrapy 1.5爬取网站一个简单实例_xianjie0318的博客-程序员宅基地

参考scrapy中文教程,http://scrapy-chs.readthedocs.io/zh_CN/1.0/

一、环境:

python3.6

scrapy 1.5

Eclipse+Pydev

python配置环境变量,用于scrapy创建项目、执行爬取:

Path:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages\OpenSSL

二、需求:

1、爬取慕课网:http://www.imooc.com/course/list的课程信息

2、课程信息内容:课程url、课程标题 课程访问人数、课程简介,存储json文件;

3、课程图片下载固定目录下

三、实现过程:

1、在项目根目录下,打开cmd,执行命令,创建项目

scrapy startproject scrapytest01

scrapy.cfg: 项目的配置文件
scrapytest01/: 该项目的python模块。
scrapytest01/items.py: 项目中的item文件,用于爬取的数据结构定义,且存储数据的容器
scrapytest01/pipelines.py: 项目中的pipelines文件,用于处理数据的过程,如清理、去重、验证、存储等.
scrapytest01/settings.py: 项目的设置文件,提供了定制Scrapy组件的方法。可以控制包括核心(core),插件(extension),pipeline及spider组件。.
scrapytest01/spiders/: 放置spider代码的目录,用于如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item).


2、删除item.py,重新自定义一个需要爬取的数据结构或容器,需要定义课程标题、课程url、课程标题图片、课程描述、访问课程的人数,CourseItems.py

# -*- coding: utf-8 -*-
'''
Created on 2018年6月4日

@author: Administrator
'''
import scrapy

class CourseItems(scrapy.Item):
    #课程标题
    title=scrapy.Field()
    #课程url
    url=scrapy.Field()
    #课程标题图片
    image_url=scrapy.Field()
    #课程描述
    introduction=scrapy.Field()
    #访问课程的人数
    studentnum=scrapy.Field()

3、在spider目录下,创建MySpider.py,用于爬取网站中的课程信息

# -*- coding: utf-8 -*-
'''
Created on 2018年6月4日

@author: Administrator
'''
import scrapy
from scrapytest01.CourseItems import CourseItems

class MySpider(scrapy.Spider):
    #用于区别Spider
    name='MySpider'
    #允许访问的域
    allowed_domains=['imooc.com']
    #爬取的网址
    start_urls=["http://www.imooc.com/course/list"]
    #爬取的方法
    def parse(self,response):
        #实例一个容器保存爬取的信息
        item = CourseItems()
        #这部分是爬取部分,使用xpath的方式选择信息,具体方法根据网页结构而定
        #先获取每个课程的div
        for box in response.xpath('//div[@class="course-card-container"]/a[@target="_blank"]'):
            #获取每个div中的课程路径
            item['url'] = 'http://www.imooc.com' + box.xpath('.//@href').extract()[0]
            #获取div中的课程标题
            item['title'] = box.xpath('.//div[@class="course-card-content"]/h3/text()').extract()[0].strip()
            #获取div中的标题图片地址
            item['image_url'] = 'http:' +box.xpath('.//@src').extract()[0]
            #获取div中的学生人数
            item['studentnum'] = box.xpath('.//span/text()').extract()[0].strip()[:-3]
            #获取div中的课程简介
            item['introduction'] = box.xpath('.//p/text()').extract()[0].strip()
            #返回信息
            yield item
#         #跟进url
#         #获取下一页的url信息
#         url=response.xpath("//a[contains(text(),'下一页')]/@href").extract()
#         if url :
#             #将信息组合成下一页的url
#             page = 'http://www.imooc.com' + url[0]
#             #返回url
#             yield scrapy.Request(page, callback=self.parse)
#         #url跟进结束

4、删除pipelines.py,重新定义一个爬取的课程信息,存储json文件中

# -*- coding: utf-8 -*-
'''
Created on 2018年6月4日

@author: Administrator
'''
from scrapy.exceptions import DropItem
import json

class MyPipeline(object):
    def __init__(self):
        self.file=open('data.json','w',encoding='utf-8')
    def process_item(self, item, spider):
        #读取item中的数据
        line = json.dumps(dict(item), ensure_ascii=False) + "\n"
        #写入文件
        self.file.write(line)
        #返回item
        return item
    #该方法在spider被开启时被调用。
    def open_spider(self, spider):
        pass
    #该方法在spider被关闭时被调用。
    def close_spider(self, spider):
        pass

5、重新定义数据处理类,把爬取的图片url进行图片下载处理,并且存储到指定目录下

# -*- coding:utf-8 -*-
import scrapy
from scrapy.contrib.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem

class ImgPipeline(ImagesPipeline):
    #通过抓取的图片url获取一个Request用于下载
    def get_media_requests(self, item, info):
        #返回Request根据图片图片url下载
        yield scrapy.Request(item['image_url'])
    #当下载请求完成后执行该方法
    def item_completed(self, results, item, info):
        #获取下载地址
        image_path = [x['path'] for ok, x in results if ok]
        #判断是否成功
        if not image_path:
            raise DropItem("Item contains no images")
        #将地址存入item
        item['image_path'] = image_path
        return item

6、在setting.py中,添加ITEM_PIPELINES 添加爬取数据处理类的路径,以及执行顺序;添加IMAGES_STORE 图片下载的目录

ITEM_PIPELINES = {
    'scrapytest01.MyPipelines.MyPipeline': 100,
    'scrapytest01.ImgPipelines.ImgPipeline': 1,
}

IMAGES_STORE = 'C:\\Users\\Administrator\\Desktop\\img'

7、执行爬取

scrapy crawl MySpider

四、结果:



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xianjie0318/article/details/80568862

智能推荐

python3.6+scrapy 1.5爬取网站一个简单实例

参考scrapy中文教程,http://scrapy-chs.readthedocs.io/zh_CN/1.0/一、环境:python3.6scrapy 1.5Eclipse+Pydevpython配置环境变量,用于scrapy创建项目、执行爬取:Path:C:\Users\Administrator\AppData\Local\...

Python利用Scrapy框架爬取豆瓣电影示例

主要介绍了Python利用Scrapy框架爬取豆瓣电影,结合实例形式分析了Python使用Scrapy框架爬取豆瓣电影信息的具体操作步骤、实现技巧与相关注意事项,需要的朋友可以参考下

python / scrapy框架 爬取京东商品

python / scrapy框架 爬取京东商品 完全不明白为啥,下面这两个 # 打开电子书价格 yield Request(url = self.Eprice_url.format(skuId=skuId, cat=cat),meta={'item':item},callback=self.price_parse) # 打开...

Python Scrapy图片爬取原理及代码实例

class ImgSpider(scrapy.Spider): name = 'img' # allowed_domains = ['www.xxx.com'] start_urls = ['http://www.521609.com/daxuemeinv/'] url = 'http://www.521609.com/daxuemeinv/list8%d.html' pageNum =...

使用python的scrapy模块爬取文本保存到txt文件

使用python的scrapy爬取文本保存为txt文件 编码工具 Visual Studio Code 实现步骤 1.创建scrapyTest项目 在vscode中新建终端并依次输入下列代码: scrapy startproject scrapyTest cd scrapyTest code 打开项目...

python+scrapy项目爬取17k小说网站小说详情

爬取17k小说网,通过另一种方式实现翻页爬取,爬取一级目录小说列表页内容、二级目录小说详情页内容,并存入csv文件。除了scrapy项目外,内附scrapy创建。

Python爬虫实例——scrapy框架爬取拉勾网招聘信息

主要介绍了Python爬虫实例——scrapy框架爬取拉勾网招聘信息的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

Python scrapy增量爬取实例及实现过程解析

这篇文章主要介绍了Python scrapy增量爬取实例及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 开始接触爬虫的时候还是初学Python的那会,用的...

Python-scrapy实现爬取简书首页热门文章

scrapy实现爬取简书首页热门文章

python的scrapy框架爬取天气预报

利用python的scrapy框架爬取天气预报的信息,是python爬虫入门的好程序,如果还有小伙伴不会运行scrapy框架程序的,可以在下方评论区里说明。

Python爬虫 scrapy框架爬取某招聘网存入mongodb解析

scrapy startproject zhaoping 创建爬虫 cd zhaoping scrapy genspider hr zhaopingwang.com 目录结构 items.py title = scrapy.Field() position = scrapy.Field() publish_date = scrapy.Field() pipelines....

Python使用scrapy框架爬取腾讯招聘

创建项目 : scrapy startproject tencent 创建爬虫:scrapy genspider tc careers.tencent.com tc.py # -*- coding: utf-8 -*- import scrapy import json class TcSpider(scrapy.Spider): name = 'tc' allowed_...

python用scrapy框架爬取代理ip的案例

使用python3.6版本,scrapy框架写的,学习网络爬虫一个很好的入门案例。可以直接运行,如果有小伙伴不会运行scrapy写的程序的可以评论留言,也可以去我的博客里逛逛。

Python下使用Scrapy爬取网页内容的实例

今天小编就为大家分享一篇Python下使用Scrapy爬取网页内容的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

python scrapy爬虫 爬取文章网站 翻译并发布到wordpress网页全套源码,用于网赚,也可用于爬虫学习

python scrapy爬虫,兼职赚钱,破解有道翻译api,爬虫批量爬取新闻(内含知乎专栏,励志一生,华盛顿邮报和一个图片网站的爬取方法)翻译发布到wordpress.全套功能都包括,也可用作爬虫学习

Python Scrapy多页数据爬取实现过程解析

主要介绍了Python Scrapy多页数据爬取实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Scrapy爬取dome.html_python爬虫_源码

爬虫 Scrapy爬取dome.html

scrapy框架爬取小说网的数据的python源码

自己写的一个用scrapy框架爬取小说网的数据的python源码,分章节下载的一个方式,希望初学者看到能有所收获,

Python-pythonscrapy爬取电影天堂所有电影

python scrapy爬取电影天堂所有电影

sina_nba_crawler:利用python-scrapy爬取新浪nba数据库中的球员数据-源码

利用python-scrapy爬取新浪nba数据库中的球员数据,scrapy的使用主要注意三个文件: items.py #该文件定义一个类,类的成员用于爬虫解析的最终结果数据类型 spiders/nba.py #这是爬虫的解析程序,大部分内容都是专门...

python使用scrapy自动爬取多个网页

前面介绍的scrapy爬虫只能爬取单个网页。如果我们想爬取多个网页。比如网上的小说该如何如何操作呢。比如下面的这样的结构。是小说的第一篇。可以点击返回目录还是下一页 对应的网页代码: 我们再看进入后面...

Scrapy框架爬取Boss直聘网Python职位信息的源码

使用CrawlSpider结合LinkExtractor和Rule爬取网页信息 LinkExtractor用于定义链接提取规则,一般使用allow参数即可 LinkExtractor(allow=(), # 使用正则定义提取规则 deny=(), # 排除规则 allow_domains=(), # ...

使用Python的Scrapy框架十分钟爬取美女图

用 scrapy 可以快速的开发一个简单的爬虫,官方给出的一个简单例子足以证明其强大: 快速开发 下面开始10分钟倒计时: 当然开始前,可以先看看之前我们写过的 scrapy 入门文章 《零基础写python爬虫之使用Scrapy...

随便推点

推荐文章

热门文章

相关标签