tutorial/items.py:项目的items文件
tutorial/pipelines.py:项目的pipelines文件,需要注册到setting.py中,会自动执行process_item方法
tutorial/settings.py:项目的设置文件
tutorial/spiders/:存储爬虫的目录,写好文件后,自动生效
目标:抓取cnblog的标题和新闻
1.新建立一个项目
执行
scrapy startproject cnblog
2.修改item.py,添加title、url、content字段
import scrapy
class CnblogItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
url = scrapy.Field()
title = scrapy.Field()
content = scrapy.Field()
pass
3.新建一个spider,抓取内容
from scrapy.spider import Spider
from scrapy.selector import Selector
import urllib.request
from scrapy.http import Request
from cnblog.items import CnblogItem
class CnSpider(Spider):
#爬虫的名称
name = "cnblog"
#允许爬的域名,防止爬偏了
allowed_domains = ["cnblogs.com","news.cnblogs.com"]
#设置起始的链接,获取全部翻页链接
start_urls = []
for pn in range(1,2):
url = 'https://news.cnblogs.com/n/page/%s/' % pn
start_urls.append(url)
#获取所有的内容页面链接
def parse(self, response):
sel = Selector(response)
news_list = sel.xpath('//h2[@class="news_entry"]')
for new_i in news_list:
new_link=new_i.xpath('a/@href').extract()
link_0=str("https://news.cnblogs.com"+new_link[0])
yield Request(link_0,callback=self.parse_item)
#抓取新闻详细页内容
def parse_item(self,response):
item = CnblogItem()
item['url'] = response.request.url
item['title'] = response.xpath('//div[@id="news_title"]/a/text()').extract()[0]
item['content'] = response.xpath('//div[@id="news_body"]').extract()[0]
yield item
4.定义pipelines,将内容保存到items.jl
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
from Util import FileUtil
class CnblogPipeline(object):
def __init__(self):
self.file = open('items.jl', 'w')
self.url_seen = set()
def process_item(self, item, spider):
#过滤下重复的数据
if item['url'] in self.url_seen:
raise DropItem("Duplicate item found: %s" % item)
else:
self.url_seen.add(item['url'])
line = json.dumps(dict(item)) + "\n"
self.file.write(line)
FileUtil.saveNews(item['url'],item['title'],item['content'])
return item
5.激活定义的pipelines
修改settings.py
ITEM_PIPELINES = {
'cnblog.pipelines.CnblogPipeline': 300,
}
6.FileUtil.py的代码
from urllib.request import quote
import urllib.request
import sqlite3
class FileUtil:
#根据url下载图片,如果没有设置图片地址,自动保存到D:\\download\\图片名称
def downImg(imgUrl,savePath=None):
imgName=imgUrl.split('/')[-1]
preUrl=imgUrl.replace(imgName,"")
if savePath is None:
savePath="D:\\download\\"+imgName
conn = urllib.request.urlopen(preUrl+quote(imgName))
f = open(savePath,'wb')
f.write(conn.read())
f.close()
print('Saved:'+savePath)
def saveNews(url,title=None,content=None):
if title is None:
title=""
if content is None:
content=""
conn = sqlite3.connect('news.db')
cursor = conn.cursor()
# 执行一条SQL语句,创建user表:
cursor.execute('create table IF NOT EXISTS news (id INTEGER PRIMARY KEY, url varchar(100),title vachar(100),content text)')
cursor.execute('select * from news where url=\''+url+'\'')
values=cursor.fetchall()
if len(values) > 0:#链接以前就存在
print('链接已经存在:'+url)
else:
cursor.execute('insert into news (url, title,content) values (\''+url+'\', \''+title+'\', \''+content+'\')')
print("save success."+url)
# 关闭Cursor:
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()
分享到:
相关推荐
scrapy爬取cnblog博客园文章列表保存到本地数据库。这个是本人最近学习爬虫的一个实践案例,源码解析详情请移步博文:https://blog.csdn.net/xiaocy66/article/details/83834261
基于Python和Echarts职位画像系统-用Scrapy抓取招聘数据使用Django+echarts完成数据可视化,该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一个高效且结构化的抓取系统,能够方便地抓取网页数据并进行处理。在这个“scrapy抓取多级页面的某子二手车”项目中,我们将深入探讨如何利用Scrapy来实现对二手...
【Python-scrapy抓取糗事百科热门】 在Python开发领域,Web爬虫是一个重要的技术分支,用于自动收集网络上的信息。Scrapy是一个强大的、高效的爬虫框架,它为开发者提供了构建爬虫项目的便利。本教程将详细介绍如何...
Scrapy是一个强大的Python爬虫框架,它为网络数据抓取提供了高效、易用的解决方案。在本项目中,“Scrapy抓取美女图片并且保存”是一个典型的数据抓取应用,主要涉及以下几个关键知识点: 1. **Scrapy框架**:...
基于Python和Echarts职位画像系统,使用Scrapy抓取职位招聘数据,使用Django+echarts完成数据可视化。 环境安装配置 建议直接安装anconda,然后git clone后进入项目目录,执行pip install -r requirements.txt ...
在本项目中,我们将深入探讨如何使用Python的Scrapy框架来抓取古诗数据,包括唐诗和宋词,最终将这些数据存储为JSON格式。Scrapy是一个强大的、专为爬取网站并提取结构化数据而设计的工具,非常适合进行大规模的数据...
基于Python和Echarts职位画像系统,使用Scrapy抓取职位招聘数据,使用Django+echarts完成数据可视化。 环境安装配置 建议直接安装anconda,然后git clone后进入项目目录,执行pip install -r requirements.txt 项目...
在本项目中,我们利用Scrapy来抓取和讯论坛上的特定关键字搜索结果,包括帖子的内容、发帖人以及发帖时间。以下是关于这个任务的详细知识点和步骤: 1. **Scrapy框架基础**: - Scrapy由多个组件构成,如Spiders...
Scrapy是一个强大的Python爬虫框架,它允许开发者高效地抓取网页内容并处理数据。在本项目中,我们将探讨如何使用Scrapy来抓取在线图书网站的资源,并将抓取到的数据异步存储到MySQL数据库中。这涉及到几个关键的...
Python-scrapy是一个强大的框架,专为网络爬虫设计,用于高效、结构化地抓取大量网页数据。在本项目中,“Python-scrapy抓取链家网二手房成交数据”旨在利用Scrapy来收集链家网上关于二手房成交的具体信息,如房源...
通过django创建搜网网站,通过elasticsearch实现动态搜索scrapy抓取的数据.zip
在本文中,我们将深入探讨如何使用Python的Scrapy框架来抓取拉勾网上的Java招聘信息,并将这些数据处理成词云。首先,我们要了解Scrapy,这是一个强大的、用于Web抓取和信息提取的Python框架,它提供了高效且灵活的...
Scrapy是一个强大的Python爬虫框架,常用于网络数据抓取。在这个项目中,"Scrapy 抓取 网易严选、小米有品产品数据.zip",开发者使用Scrapy来收集网易严选和小米有品两个电商平台上的产品数据。这通常涉及到网页解析...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了构建网络爬虫所需的各种工具和组件,使得数据抓取工作变得高效且便捷。在这个项目中,我们将使用Scrapy来抓取Google App Store的应用信息,并将这些数据存储到...
2. **Scrapy**: Scrapy是一个强大的Python爬虫框架,用于高效地抓取网页数据。它提供了结构化的数据处理管道(Pipeline)和中间件(Middleware)机制,使得开发者可以便捷地构建和管理网络爬虫项目。在这个项目中,...
scrapy抓取数据存储至本地mysql数据库 基于python开发,采用scrapy,数据存储至本地数据库(或excel表格) 程序的主要目的是完成抓取和分析的任务同时学习爬虫相关知识,所以在细节处理上略有不足,但考虑到最终的...
使用python的爬虫框架scrapy抓取51job网站的招聘信息并存入文件 (DataSpider) 二、大数据存储 编写java脚本使用HDFS API把数据上传到HDFS文件系统 三、大数据处理 使用Hadoop处理大数据 (BigDataHandler) - 不懂运行...
基于Python和Echarts职位画像系统,使用Scrapy抓取职位招聘数据,使用Django+echarts完成数据可视化。 环境安装配置 建议直接安装anconda,然后git clone后进入项目目录,执行pip install -r requirements.txt ...